python 角点检测

一. Harris角点
1.Harris角点原理
角点原理来源于人对角点的感性判断,即图像在各个方向灰度有明显变化。算法的核心是利用局部窗口在图像上进行移动判断灰度发生较大的变化。

2.Harris算法数学模型
根据算法思想,构建数学模型,计算移动窗口的的灰度差值
python 角点检测_第1张图片
python 角点检测_第2张图片
上图中W函数表示窗口函数,M矩阵为偏导数矩阵。对于矩阵可以进行对称矩阵的变化,假设利用两个特征值进行替代,其几何含义类似下图中的表达。在几何

模型中通过判断两个特征值的大小,来判定像素的属性。
python 角点检测_第3张图片
M为梯度的协方差矩阵 ,在实际应用中为了能够应用更好的编程,定义了角点响应函数R,通过判定R大小来判断像素是否为角点。

R取决于M的特征值,对于角点|R|很大,平坦的区域|R|很小,边缘的R为负值
python 角点检测_第4张图片
python 角点检测_第5张图片

3.算法原理
利用水平,竖直差分算子对图像的每个像素进行滤波以求得Ix,Iy,进而求得M中的四个元素的值。
在这里插入图片描述

4.实现代码截图:
python 角点检测_第6张图片

python 角点检测_第7张图片
5.代码分析:
导入图片后使用compute_harris_response(im) 函数,返回像素值为 Harris 响应函数值的一幅图像。之后,可以从这幅图像中挑选出需要的信息。然后,选取像素值高于阈值的所有图像点;再加上额外的限制,即角点之间的间隔必须大于设定的最小距离。这种方法会产生很好的角点检测结果。为了实现该算法,我们获取所有的候选像素点,以角点响应值递减的顺序排序,然后将距离已标记为角点位置过近的区域从候选像素点中删除。这里的实现使用get_harris_points() 函数。

函数的意义:
computer_harris_response:在一幅灰度图像中,对每一个像素计算harris角点检测器响应函数。
get_harris_points:从一副harris响应图像中返回角点。
plot_harris_points:绘制图像中检测到的角点

6.实验结果:
阈值为0.01、0.05和0.1检测出的角点 实验结果:
正面:
python 角点检测_第8张图片
python 角点检测_第9张图片
侧面:
python 角点检测_第10张图片
python 角点检测_第11张图片
近距离:
python 角点检测_第12张图片
python 角点检测_第13张图片
明亮光下:
python 角点检测_第14张图片
python 角点检测_第15张图片

7.结果分析:
阈值决定检测点数量
增大阈值的值,将减小角点响应值,降低角点检测的灵性,减少被检测角点的数量;减小阈值,将增大角点响应值,增加角点检测的灵敏性,增加被检测角点的数量。
因此可以通过设置不同的阈值在不同的环境条件下得到更加准确的结果。

你可能感兴趣的:(python 角点检测)