1.实现流程

通过提取图像中的特征点并匹配这些特征点来找到图像间的对应关系,再通过透视变换(Homography)将两幅图像拼接成一幅完整的图像,大致流程:

  1. 特征点检测与描述
    • 使用 SIFT 算法检测两张图像中的关键点,并计算特征描述子(局部特征向量)
  2. 特征匹配
    • 采用 KNN 近邻匹配(k=2)找到两张图像间的最佳匹配点对
    • 使用 比值测试(ratio test) 过滤掉低质量的匹配点,减少误匹配
  3. 单应性矩阵计算
    • 通过 RANSAC 算法 计算 单应性矩阵 (Homography, H),剔除误匹配点
    • 单应性矩阵用于 透视变换,使一张图像对齐另一张图像
  4. 图像变换与拼接
    • 利用 cv2.warpPerspective() 对图像A进行透视变换,使其尽可能与图像B对齐
    • 图像B放入最终结果中,合成拼接图像
  5. 可视化匹配结果
    • 在两张图像上绘制匹配点连线,帮助观察特征匹配的效果

2.相关算法

1.SIFT(尺度不变特征变换)

SIFT (Scale-Invariant Feature Transform) 是一种 关键点检测和描述算法,能够在 不同尺度、旋转、光照变化 下仍然保持稳定的特征匹配。

阅读全文 »

1.OpenCV概述

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,主要用于 图像处理、视频分析、机器视觉、深度学习 等领域。它最初由 Intel 研发,现在由 OpenCV 组织 维护,目前支持 C++、Python、Java 等多种语言。擅长领域有:

  1. 图像处理
    • 去噪:去掉照片上的噪点,让图像更清晰
    • 平滑 & 锐化:模糊处理(比如美颜相机的磨皮)、增强边缘(让模糊的字变得更清楚)
    • 颜色调整:可以把彩色图转换成黑白图(灰度化),或者增强对比度
    • 图像分割:把图片中的不同区域分开,比如把人的头像从背景中抠出来(绿幕抠像)
  2. 物体检测与识别
    • 人脸检测:找到照片或视频里的人脸,并画出边框(Haar 级联分类器、DNN)
    • 车牌识别:用于交通监控,自动读取车牌号码
    • 目标检测:找出图片中的特定物体,比如识别商店里的商品、扫描条形码等
阅读全文 »

1.循环神经网络(RNN)

环神经网络(Recurrent Neural Network, RNN)也叫递归神经网络,是专门处理序列数据的神经网络架构,其核心思想是通过循环连接使网络具备“记忆”能力,从而构建序列中时序之间的依赖关系。而处理具有时序或顺序关系的数据(如语言、语音、基因序列等)的核心挑战是理解序列中的上下文依赖关系
RNN有隐藏状态(hidden state),可以保留和传递之前时刻的信息,也就是有记忆功能,从而可实现有上下文依赖性的数据处理:
通俗一点就像是人在读一句话:

  • 读到 “我” → 记住
  • 读到 “今天” → 结合前面的信息
  • 读到 “很” → 继续理解上下文
  • 读到 “开心” → 知道整体含义”我今天很开心“

1.RNN结构

RNN 通过隐藏状态(Hidden State) 存储历史信息,并通过时间步(Time Step)进行递归计算

  • 输入层:接收当前时间步的输入 $x_t$
  • 隐藏层:包含一个循环连接,用于存储历史信息:$h_t = f(W_h h_{t-1} + W_x x_t + b)$
  • 输出层:根据隐藏状态计算输出 $y_t$
阅读全文 »

1.迁移学习

做图像识别是不是每次都意味着要自定义模型,确定好 卷积层池化层 和 全连接层,然后从0开始训练?不同类型的图像数据集会不会有通用的特征?如果训练样本比较少怎么办?是不是可以把已经训练好的模型,拿过来稍微改改就可以使用的?

迁移学习(Transfer Learning) 就是这种可以将已有模型的知识迁移到新任务的学习方法,具有以下特点:

  • 适合数据量比较少的任务,但是有预训练知识,无需从头训练深度神经网络
  • 更快的训练速度和更少的资源消耗
  • 避免过拟合,训练效果更好,预训练的模型已经在大数据集上学到了通用特征(如边缘、形状、颜色)
阅读全文 »

前文 利用神经网络实现手写字体识别 中构建的模型只单单使用了全连接层, 其中每一层的神经元都会与前一层的所有神经元相连接,这种结构其实更适合于结构化数据或一维数据。而像手写字体识别之类的图像结构数据,使用卷积神经网络其实会更合适一点,一方面通过卷积层可以提取局部特征,另一方面经过池化层还能减少参数量,提高处理效率。

1.卷积神经网络

卷积神经网络(Convolutional Neural Network,简称CNN)是一种特别适合处理图像、视频、语音、文本等数据的神经网络结构,它通过模仿生物视觉系统的工作原理,利用 卷积层池化层全连接层 来提取数据中的空间特征,并通过训练来优化参数,这在计算机视觉任务中有着广泛应用。

1.基本原理

CNN的核心思想是“卷积”操作。简单来说,卷积是用一个小的矩阵(称为卷积核)在输入图像上滑动,通过和图像的局部区域进行逐点相乘并求和,提取出图像的局部特征。卷积操作通常会在多个卷积层次上进行,从而能够识别图像中的简单特征(如边缘、纹理)和复杂特征(如物体、面部等)。

阅读全文 »

回归任务:通过输入一些样本数据或者特征,经过多层神经网络,最后能得到一个预测值。

1.气温数据处理

1.数据加载

1
2
3
4
5
6
7
def load_csv():  
path = Path("data")
filename = "temps.csv"
return pd.read_csv(path / filename)

print(f"shape:{features.shape}\n columns:{features.columns}")
print(features[:5]) # 打印前5条数据
阅读全文 »

本文主要是讲如何使用 PyTorch 实现手写数字识别,包括MNIST数据集加载处理、神经网络模型定义、训练并评估模型。

1.Mnist数据集

Mnist数据集是美国国家标准与技术研究院收集的关于手写数字扫描图像及其对应识别数字的数据集。该数据集分为两部分:
第一部分包含60000幅28x28大小的灰度图及对应识别数字,用作训练数据,这些图像扫描自250个人的手写样本。
第二部分包含10000幅28x28大小的灰度图及对应识别数字,用作测试数据,为了保证测试结果,这些图像来自另外一批人。

阅读全文 »
0%