首页 > 编程语言 > 详细

Harris角点检测算法

时间:2020-02-25 22:27:13      阅读:199      评论:0      收藏:0      [点我收藏+]

一,角点

  角点还没有明确的数学定义。
  一般的角点检测都是对有具体定义的、或者是能够具体检测出来的兴趣点的检测。这意味着兴趣点可以是角点,也可以是在某些属性上强度最大或者最小的孤立点、线段的终点,或者是曲线上局部曲率最大的点。在实践中,通常大部分称为角点检测的方法检测的都是兴趣点,而不是独有的角点。因此,如果只要检测角点的话,需要对检测出来的兴趣点进行局部检测,以确定出哪些是真正的角点。
  目前的角点检测算法可归纳为3类:基于灰度图像的角点检测、基于二值图像的角点检测、基于轮廓曲线的角点检测。角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。对灰度图像、二值图像、边缘轮廓曲线的角点检测算法进行综述,分析了相关的算法,并对各种检测算法给出了评价。
二,Harris算法
  Harris角点提取算法:Harris 角点提取算法是Chris Harris 和Mike Stephens 在H.Moravec 算法的基础上发展出的通过自相关矩阵的角点提取算法,又称Plessey算法。Harris角点提取算法这种算子受信号处理中自相关面数的启发,给出与自相关函数相联系的矩阵M。M 阵的特征值是自相关函数的一阶曲率,如果两个曲率值都高,那么就认为该点是角点特征。

  算法流程

  • 1.利用水平,竖直差分算子对图像的每个像素进行滤波以求得Ix,Iy,进而求得M中的四个元素的值。
    技术分享图片

    代码中如果窗口数组array为-1,0,1,-1,0,1,-1,0,1}则是求解X方向的,如果为{-1,-1,-1,0,0,0,1,1,1}为Y方向的,则Ix和Iy求解结束,求解IX2相对比较简单,像素相乘即可。

  • 2.对M的四个元素进行高斯平滑滤波,为的是消除一些不必要的孤立点和凸起,得到新的矩阵M。
  • 3.3.接下来利用M计算对应每个像素的角点响应函数R,即:
    技术分享图片
  • 4、局部极大值抑制,同时选取其极大值
  • 5.在矩阵R中,同时满足R(i,j)大于一定阈值threshold和R(i,j)是某领域内的局部极大值,则被认为是角点

三,代码

 1 from pylab import *
 2 from PIL import Image
 3 from PCV.localdescriptors import harris
 4 """
 5 Example of detecting Harris corner points (Figure 2-1 in the book).
 6 """
 7 # 读入图像
 8 im = array(Image.open(rb3.jpg).convert(L))
 9 # 检测harris角点
10 harrisim = harris.compute_harris_response(im)
11 # Harris响应函数
12 harrisim1 = 255 - harrisim
13 figure()
14 gray()
15 #画出Harris响应图
16 subplot(141)
17 imshow(harrisim1)
18 print (harrisim1.shape)
19 axis(off)
20 axis(equal)
21 threshold = [0.01, 0.05, 0.1]
22 for i, thres in enumerate(threshold):
23     filtered_coords = harris.get_harris_points(harrisim, 6, thres)
24     subplot(1, 4, i+2)
25     imshow(im)
26     print (im.shape)
27     plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], *)
28     axis(off)
29 show()

四,运行结果

 4.1纹理平坦的图

   4.1.1正面

   技术分享图片技术分享图片

   4.1.2侧面

   技术分享图片技术分享图片

   4.1.3旋转

   技术分享图片技术分享图片

   4.1.4相对较远处

   技术分享图片技术分享图片

    4.1.5较亮情况

    技术分享图片技术分享图片

 4.2垂直或水平边缘多

    4.2.1正面

   技术分享图片技术分享图片

    4.2.2侧面

   技术分享图片技术分享图片

   4.2.3旋转

   技术分享图片技术分享图片

    4.2.4相对较远处

   技术分享图片技术分享图片

 4.3纹理角点丰富

     4.3.1正面

  技术分享图片技术分享图片

     4.3.2侧面

   技术分享图片技术分享图片

   4.3.3旋转

   技术分享图片技术分享图片

   4.3.4相对较远处

     技术分享图片技术分享图片

五,结论以及实验中遇到的问题

 5.1实验结果分析

1. Harris角点具有旋转不变性。

Harris角点检测通过窗口对应的二阶矩阵的特征值得到角点响应值R,从而判断角点。当图像转动时,角点区域的像素点梯度坐标和拟合椭圆对应地发生旋转,但是矩阵的特征值(也可以理解为数据点区域的拟合椭圆)不变,因此图像旋转不影响角点的检测。

2. Harris角点检测算子对亮度和对比度的变化不灵敏
  这是因为在进行Harris角点检测时,使用了微分算子对图像进行微分运算,而微分运算对图像密度的拉升或收缩和对亮度的抬高或下降不敏感。换言之,对亮度和对比度的仿射变换并不改变Harris响应的极值点出现的位置,但是,阈值的选择可能会影响角点检测的结果。

3. Harris角点检测算子不具有尺度不变性

当图像被缩小或放大时,在检测窗口尺寸不变的前提下,在窗口内所包含图像的内容是完全不同的,角点检测的性能也会发生改变。

 5.2实验中遇到的问题

  PCV,是一个很老的包了,从下载地址:https://github.com/jesolem/PCV (原链接,适用于python2),但在python3的时代里已不适用。需要将原文件里的多个print语句改写成python3的形式才能正常安装。

Harris角点检测算法

原文:https://www.cnblogs.com/cenyan/p/12363921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!