Harris角点检测

来源:互联网 发布:黑米软件跑路 编辑:程序博客网 时间:2024/06/06 02:43

角点没有明确的数学定义 , 但人们普遍认为角点是二维图像亮度变化剧烈的点或图像边缘曲线上曲率极大值的点。这些点在保留图像图形重要特征的同时 , 可以有效地减少信息的数据量 , 使其信息的含量很高 , 有效地提高了计算的速度 , 有利于图像的可靠匹配 , 使得实时处理成为可能。其在三维场景重建、运动估计、目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。Harris角点检测属于基于模板的角点检测算法,用于的还有有Kitchen-Rosenfeld角点检测算法, KLT角点检测算法及SUSAN角点检测算法。基于模板的方法主要考虑像素邻域点的灰度变化,即图像亮度的变化,将与邻点亮度对比足够大的点定义为角点。
Harris检测算法考虑的是用一个高斯窗或矩形窗在图像上移动,由模板窗口取得原图像衍生出的2*2局部结构矩阵,对该模板矩阵求取特征值,建立度量函数R,根据R是否大于0,即可判断该点是否是角点,值得注意的是该方法具有旋转不变性,需要根据实际经验来确定R的阈值。

openCV里的Harris角点检测函数:

C++: void cornerHarris(InputArray src,OutputArray dst, int blockSize, int ksize, double k, intborderType=BORDER_DEFAULT )

第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可,且需为单通道8位或者浮点型图像。
第二个参数,OutputArray类型的dst,函数调用后的运算结果存在这里,即这个参数用于存放Harris角点检测的输出结果,和源图片有一样的尺寸和类型。
第三个参数,int类型的blockSize,表示邻域的大小,更多的详细信息在cornerEigenValsAndVecs()中有讲到。
第四个参数,int类型的ksize,表示Sobel()算子的孔径大小。
第五个参数,double类型的k,Harris参数。
第六个参数,int类型的borderType,图像像素的边界模式,注意它有默认值BORDER_DEFAULT。更详细的解释,参考borderInterpolate( )函数。

0 0
原创粉丝点击