图像拼接:
图像拼接的步骤
- 对每幅图进行特征点提取
- 对对特征点进行匹配
- 进行图像配准
- 把图像拷贝到另一幅图像的特定位置
- 对重叠边界进行特殊处理
图像拼接的每个步骤详解 - 特征点提取(图像的特征包括点,线,块特征)
1.1 灰度图转换
//灰度图转换
Mat image1, image2;
cvtColor(image01, image1, CV_RGB2GRAY);
1.2 提取特征点
- 涉及的数据结构
SurfFeatureDetector 特征检测器是一个类,里面有用到的方法detect()
vector
KeyPoint( Point2f _pt, float _size, float _angle=-1, float _response=0, int _octave=0, int_class_id=-1 )
- pt是关键点的坐标
- size是关键点的邻域直径
- angle是关键点的方向,在[0,360]度之间,方向与图像坐标系有关,例 如顺时针
- response是最强特征点被选择的响应,可用来进行更近一步的排序或子 采样
- octave是关键点提取所在的金字塔层数
- class_id 若关键点被聚类的话,class_id是关键点所在聚类的id
特征点也有方向?
1.SIFT学习–确定特征点的方向 - CSDN博客 https://blog.csdn.net/ro9er/article/details/7405036
为了保证特征点的方向不变性,就要确定特征点的方向,那么特征点的方向可以用下面的公式:
其中 为(x,y)处的梯度大小而 为该点的梯度方向
每个特征点都有自己的位置,所在方向,尺度的属性。只有确定了关键点的方向和大小才能保证旋转不变性和伸缩不变性。
2.opencv中SiftDescriptorExtractor所做的SIFT特征向量提取工作简单分析 - CSDN博客 https://blog.csdn.net/u012556077/article/details/47128439
(对于一个关键点找到方向,计算他周围的16个像素,旋转,每个像素映射到8个方向,都映射过去根据梯度计算方向,可以得到每一行就是128个特征向量。)
detect(image1, keyPoint1) 提取第一张图片的特征点,存放在一个向量里面
detect( const Mat& image, vector& keypoints, const Mat&mask=Mat() ) con