opencv-亚像素点检测

之前方面的总结:
之前用的Harris和Shi-Tomasi进行角点检测时得到的都是自己想要的角点,这些角点的坐标都是粗略的,要想得到最完美的角点检测就是利用亚像素级角点检测
若我们进行的不是图像处理的识别特征点而是进行几何测量,通常需要更高的精度前两种角点检测只能提供简单像素的坐标值,也就是说有时候会需要实数坐标值而不是整数坐标值。
1.亚像素级角点检测的位置在摄像机标定,跟踪并重建摄像机的轨迹,或者重建被跟踪目标的三维结构时,是一个基本的测量值
一般都是根据角点的位置–退出位置精确的亚像素级精度,一个向量和其正交的向量的点积为0
第一步就是先确定角点的位置用Harris或者Shi-Tomasi来进行求取角点,由这些角点再来计算亚像素级角点的具体位置Opencv为我们提供了cornerSubPix()函数用于寻找亚像素级角点的位置的。
2.cornerSubPix()函数寻找角点时(不是整数类型的位置,而是更加精确的浮点类型位置)
C++:void cornerSubPix(InputArray img,InputOutputArray corner,Size winSize,Size zeroZone,TermCriteria criteria);
首先说明最主要的是参数二:表示输入输出的二维点vector corners类型的,作为输入时表示由Harris角点检测之后返回的角点,首先遍历角点,把角点push_back到二维点容器中,然后在放到亚像素级角点检测函数中作为输入,输出的时候就是亚像素级的2维坐标点,进行遍历显示既可以,同时由Shi-Tomasi角点检测出来的角点直接放入亚像素级角点检测中去作为输入,输出就是亚像素级别的角点

1.输入的图像一般是灰度图像
2.Input和Output类型的角点,输入是角点的初始坐标点,输出是精准的输出坐标
3.Size类型的winSize,搜索窗口的一半尺寸,搜索窗口就是2倍的关系
4.Size类型的zeroZone,表示死区的一半尺寸 值为(-1,-1)表示无死区。
5.求角点的迭代过程的终止条件
总之在进行亚像素级的角点检测时:
1.Harris角点检测配合cornerSubPix()函数(注意参数的准备)可以求出精确的角点
2.Shi-Tomasi角点检测配合cornerSubPix()函数(注意参数的准备)可以求出精确的角点

你可能感兴趣的:(opencv-亚像素点检测)