几种角点检测的方法

harris角点检测和Shi-Tomasi角点检测均是可以配合亚像素级角点检测来进行的:只不过是harris角点检测没有Shi-Tomasi角点检测那么精确,Shi-Tomasi角点检测是harris角点检测的升级版本,
1.角点检测:计算机视觉子系统中用来捕获图像特征的一种方法,广泛应用于运动检测,图相匹配,视频跟踪,三维重建和目标识别等领域,也称为特征点检测图像的特征类型包括有:1.边缘,2.角点(感兴趣的关键点)3.斑点(感兴趣的区域)
关于角点的具体描述有:
1.一阶导数(既灰度的梯度)的局部最大所对应的像素点
2.两条既两条以上边缘的交点
3.图像中梯度值和梯度方向的变化速率都很高的点
4.角点处得一阶导数最大,二阶导数为零,它指示了物体边缘变化不连续的方向
在当前的图像处理领域中,角点检测算法可以归纳为:
1.基于灰度图像的角点检测
2.基于二值图像的角点检测
3.基于轮廓曲线的角点检测

基于灰度图像的角点检测:
1.基于梯度
2.基于模板
3.基于模板梯度组合
一.harris角点检测是一种直接基于灰度图像的角点提取算法,
实现Harris角点检测:cornerHarris()函数
C++:void cornerHarris(InputArray src,OutputArray dst,int blockSize*blockSize,int ksize,double k,intborderType=BORDER_DEFAULT)
1.参数1,输入图像,单通道8位或者浮点型图像
2.参数2,OutputArray 存放利用角点检测之后的图像
3.表示领域的大小
4.int 类型的ksize,表示Sobel()算子孔径的大小
5.double类型的k,Harris参数
6.int 类型的boderType,图像像素的边界模式有默认值BORDER_DEFAULT;
在用cornerHarris函数时要用单通道的图像
要配合阈值操作函数一起threshold()对角点检测之后的图像进行显示操作
确定图像的强角点:goodFeatureToTrack()函数
Shi-Tomasi角点检测:
goodFeatureToTrack()函数结合了Shi-Tomasi算子,用于确定图像的强角点:
C++:void goodFeaturesToTrack(InputArray image,OutputArray corners,int maxCorners,double qualityLevel,double minDistance,InputArray mask=noMask(),int blockSize=3,bool useHarrisDetector=false,double k=0.04);
1.输入图像,需要8位的或者浮点型32位单通道图像
2.OutputArray类型的corners,检测到角点的输出向量
3.int类型的maxCorner,角点的最大数量
4.double类型的qualityLevel,角点检测可接受的最小特征值
5.double类型的minDistance,角点之间的最小距离,单位为像素
6.用于指定感兴趣区域的角点检测,默认是noArray();
7.int类型的blockSize,有默认值3,是计算导数自相关矩阵时指定的邻域范围
8.bool类型的useHarrisDetector,有默认值false,指示是否使用Harris角点检测
9.double类型的k有默认值0.04,在进行各项角点检测的时候最主要的一步就是进行参数的准备
注意参数的合理性,如果参数不合理的话,就要进行参数合理化,最好用if语句来操作的
找到的角点都是一些比较粗糙的角点坐标

猜你喜欢

转载自blog.csdn.net/nbxuwentao/article/details/86516625