第10章 角点检测
10.1 Harris角点检测
10.1.1 角点
1.图像特征类型:
(1)边缘
(2)角点(感兴趣点)
(3)斑点(感兴趣区域)
2.角点定义:
(1) 一阶导数(灰度的梯度)的局部最大所对应的像素点
(2)两条及两条以上边缘的交点
(3)图像中梯度值和梯度方向的变化速率都很高的点
(4)角点处的一阶导数最大,二阶导数为0,指示了物体边缘变化不连续的方向
3.角点检测算法:
(1)基于灰度图像的角点检测
1)基于梯度
2)基于模板
考虑像素邻域点的灰度变化,将与邻域点亮度对比足够大的点定义为角点
常见算法:Kitchen-Rosenfeld角点检测、Harris角点检测、KLT角点检测、SUSAN角点检测
3)基于模板梯度组合
(2)基于二值图像的角点检测
(3)基于轮廓曲线的角点检测
10.1.2 harris角点检测
1.作用:
基于灰度图像的角点提取算法,运行Harris角点检测算子进行角点检测
2.原理:
和cornerMinEigenVal()以及cornerEigenValsAndVecs()函数类似,cornerHarris函数对于每一个像素(x,y)在blockSize*blockSize邻域内,计算2*2梯度的协方差矩阵M(x,y),然后找出输出图中局部最大值,即找出角点:

3.函数原型:
void cornerHarris(InputArray src, OutputArray dst, int blockSize, int ksize, double k, intborderType=BORDER_DEFAULT)
4.参数说明:
(1)输入图像,单通道8位或浮点型图像
(2)存放Harris角点检测输出结果,与原图像一样尺寸和类型
(3)邻域大小
(4)Sobel()算子孔径大小
(5)Harris参数
(6)图像像素边界模式,默认BORDER_DEFAULT
10.1.3 示例程序
1.Harris角点检测
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
//载入灰度图像并显示
Mat srcImage = imread("1.jpg", 0);
imshow("【原始图】", srcImage);
//进行Harris角点检测
Mat cornerStrength;
cornerHarris(srcImage, cornerStrength, 2, 3, 0.01);
//对灰度图进行阈值操作,得到二值图并显示
Mat harrisCorner;
threshold(cornerStrength

最低0.47元/天 解锁文章
479

被折叠的 条评论
为什么被折叠?



