Harris角点检测算法

  • 一、算法原理
  • 二、代码
  • 三、运行结果与分析
    • (一)纹理、角点丰富场景
    • (二)纹理平坦场景
    • (三)垂直或水平边缘多场景
  • 四、总结
  • PS:为了消除参数k的影响,也可采用商来计算响应

Harris角点检测算法

一、算法原理

哈里斯角点是在任意方向上移动(u,v),都会有很明显的变化。如下图一个局部很小的区域,如果是在图片区域中移动灰度值没有变化,那么窗口内不存在角点。如果在某一个方向上移动,一个发生很大变化而另一侧没有变化,那么说明这个区域是位于该对象的边缘区域。

其表达式如下图:

其含义是对于图像I(x,y),在点(x,y)处平移(u,v)后的自相似性。其中w(x,y)是加权函数,它可以是常数,也可以是高斯加权函数。如图2所示。

根据泰勒展开和一些数学步骤后可得到如下结果:

其中

公式中Ix和Iy是在x和y方向获取的区域。
最后转化为R=det(M) - k(trace(M))^2,该公式决定了一个区域内是否包含角特征。
公式中:
det(M) = λ1λ2
trace(M) = λ1+λ2
λ1和λ2是M的特征值。
这些特征值决定了一个区域是角,边缘还是平面。
当|R|很小时,即λ1和λ2很小时,该区域时平面。
当 R < 0时,即λ1远远大于λ2或者λ2远远大于λ1时,该区域时直线。
当 R很大时,即λ1和λ2都很大且近似相等,该区域时角点。
他们的关系可以表示为下图。

哈里斯角点的性质
该算法算子对亮度和对比度的变化不敏感。
算子具有旋转不变性。
算子不具有尺度不变性。
HARRIS角点检测
角点计算流程:
对角点响应函数R进行阈值处理: R > threshold
提取R的局部极大值
PS:为了消除参数k的影响,也可采用商来计算响应:

二、代码

# -*- coding: utf-8 -*-
from pylab import *
from PIL import Image
from PCV.localdescriptors import harris"""
Example of detecting Harris corner points (Figure 2-1 in the book).
"""# 读入图像
im = array(Image.open('F:\计算机视觉\博客二\平坦正.jpg').convert('L'))# 检测harris角点
harrisim = harris.compute_harris_response(im)# Harris响应函数
harrisim1 = 255 - harrisimfigure()
gray()#画出Harris响应图
subplot(141)
imshow(harrisim1)
print(harrisim1.shape)
axis('off')
axis('equal')threshold = [0.01, 0.05, 0.1]
for i, thres in enumerate(threshold):filtered_coords = harris.get_harris_points(harrisim, 6, thres)subplot(1, 4, i+2)imshow(im)print(im.shape)plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')axis('off')#原书采用的PCV中PCV harris模块
#harris.plot_harris_points(im, filtered_coords)# plot only 200 strongest
# harris.plot_harris_points(im, filtered_coords[:200])show()

三、运行结果与分析

(一)纹理、角点丰富场景

①:正面
原图

运行结果

②:侧面
原图

运行结果

③:旋转
原图

运行结果

④:光照
原图

运行结果

⑤:远近
原图

运行结果

运行结果分析:
对于纹理丰富的场景,由于角点易被检测,即改变视角时会产生较大影响,能够明显看出角点检测数在不同视角下的变化。亮度变化时,对于角点的检测有相当的影响,明亮场景下角点易被检测,黑暗环境下角点不易被检测。距离远近变化时,角点检测的变化较小,拉远会使角点检测数变少,反之变多。由于角点数较多,当进行对比时,很难保证能够确认为同一事物。

(二)纹理平坦场景

①:正面
原图

运行结果

②:侧面
原图

运行结果

③:旋转
原图

运行结果

④:光照
原图

运行结果

⑤:远近
原图

运行结果

运行结果分析:
首先,对于纹理平坦的场景,最明显的一点,背景中的部分杂物,当视角变换时原本边缘的事物位置也会产生变动,容易被检测为密集的角点,产生一定的不必要的影响。其次,当图中事物因远近变化而放大缩小时,可能使原本不够明显的东西被检测为角点或者原本能够被检测为角点的东西被忽略。当视角变换时,对于原本就能够被检测的角点不易产生影响,亮度变换时,对于角点的检测可能会产生一定的影响,但该影响并不大。

(三)垂直或水平边缘多场景

①:正面
原图

运行结果

②:侧面
原图

运行结果

③:旋转
原图

运行结果

④:光照
原图

运行结果

⑤:远近
原图

运行结果

运行结果分析:

对于垂直或水平边缘较多的场景而言,由于特征明显,角点易于检测,在不同视角下对比明显,易得出结果的不同,较为明显的一点是,距离拉远后,原本处于一条线上的角点可能只被检测少数或一个,变换视角,对于角点的检测不易产生影响,变换视角后,角点基本上都能被成功的检测出来。在亮度变暗的部分被检测到的角点明显减少,因此亮度条件对于该场景的角点检测有较大的影响。

四、总结

通过如上实验,在不同类型的场景下,角点检测的结果类型不尽相同,各种条件对各种场景角点检测的影响幅度也各不相同,Harris角点检测算法是对Moravec算法的改进和提高,Harris算法是利用高斯窗函数和泰勒展开式,增加了角点检测算法的准确性,Harris角点检测子对图像的旋转变化、视角变化以及图像噪声具有比同类检测子更好的稳定性。然而Harris角点检测子对图像的尺度变化非常敏感,小的尺度变化就会造成Harris角点的复现率快速下降。这个特点在上面的实验可以看出来。图像的尺度伸缩将使得由Harris检测子提取的特征不具有可重复性。
Harris角点检测的性质:
1、阈值对角点检测的影响
增大阈值,降低角点检测的灵敏度,减少被检测角点的数量;减少阈值,增加角点检测的灵敏度,增加被检测角点的数量。
2、Harris角点检测算子对亮度和对比度的变化不灵敏
这是因为在进行Harris角点检测时,使用了微分算子对图像进行微分运算,而微分运算对图像密度的拉升或收缩和对亮度的抬高或下降不敏感。换言之,对亮度和对比度的仿射变换并不改变Harris响应的极值点出现的位置,但是,由于阈值的选择,可能会影响角点检测的数量。
3、Harris角点检测算子具有旋转不变性
Harris角点检测算子使用的是角点附近的区域灰度二阶矩矩阵。而二阶矩矩阵可以表示成一个椭圆,椭圆的长短轴正是二阶矩矩阵特征值平方根的倒数。当特征椭圆转动时,特征值并不发生变化,所以判断角点响应值R也不发生变化,由此说明Harris角点检测算子具有旋转不变性。
4、Harris角点检测算子不具有尺度不变性
当图像被缩小时,在检测窗口尺寸不变的前提下,在窗口内所包含图像的内容是完全不同的。

PS:为了消除参数k的影响,也可采用商来计算响应


待补充

Harris角点检测算法相关推荐

  1. 【机器视觉学习笔记】Harris 角点检测算法(C++)

    目录 原理 算法步骤 优缺点 源码 效果 原图 输出 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文摘自2.Harris角点检测算法 -- ...

  2. Harris角点检测算法优化

    Harris角点检测算法优化 一.综述 用 Harris 算法进行检测,有三点不足:(1 )该算法不具有尺度不变性:(2 )该算法提取的角点是像素级的:(3 )该算法检测时间不是很令人满意. 基于以上 ...

  3. Harris角点检测算法手动实现

    算法流程: 将图像转换为灰度图像 利用Sobel滤波器求出 海森矩阵 (Hessian matrix) : 将高斯滤波器分别作用于Ix².Iy².IxIy: 计算每个像素的 R= det(H) - k ...

  4. python 角点检测_python实现Harris角点检测算法

    算法流程: 将图像转换为灰度图像 利用Sobel滤波器求出 海森矩阵 (Hessian matrix) : 将高斯滤波器分别作用于Ix².Iy².IxIy 计算每个像素的 R= det(H) - k( ...

  5. python 角点检测_python 实现Harris角点检测算法

    算法流程: 将图像转换为灰度图像 利用Sobel滤波器求出 海森矩阵 (Hessian matrix) : 将高斯滤波器分别作用于Ix².Iy².IxIy 计算每个像素的 R= det(H) - k( ...

  6. harris角点检测算法实现

    算法流程: 1.将图像转换为灰度图像: 2.利用Sobel滤波器求出 海森矩阵 (Hessian matrix) : 3.将高斯滤波器分别作用于Ix².Iy².IxIy: 4.计算每个像素的 R= d ...

  7. 计算机视觉(二)HARRIS角点检测算法与SIFT

    文章目录 前言 一.HARRIS角点检测算法 1.什么是角点(corner points) 2.角点检测算法的基本思想 3.什么是好的角点检测算法 4.角点特征的数学刻画 5.度量角点响应 6.HAR ...

  8. 图像处理——Harris角点检测算法原理

    目录 一 特征检测算法 二 特征定义 三 Harris检测角点特征 四 Harris检测原理 1.灰度变化描述 2.E(u,v)E(u,v)值,一般取0.04~0.06: borderType:像素插 ...

  9. 测角误差估计算法matlab,Harris角点检测 及 Matlab实验

    目录 1 基础知识 1.1 图像变化的类型 1.2 提取点特征的作用 1.3 什么是好的角点检测算法? 2 Harris 角点检测 2.1 Harris角点检测基本思想 2.2 Harris角点检测: ...

最新文章

  1. Android运行报错avd,Android Studio出错:无法在模拟器中启动AVD
  2. C/C++内存分配方式与存储区
  3. 丽水数据可视化设计价格_50个数据可视化最有价值的图表(建议收藏)
  4. 实验 7 场景运行监控及性能测试结果分析_实验报告--软件功能测试与性能测试实验
  5. 让TFS忽略packages文件夹的更改
  6. pymol怎么做底物口袋表面_如何系统的去做有机合成工艺优化---之实战策略
  7. 将Ubuntu安装到U盘
  8. iOS底层探索之多线程(八)—GCD源码分析(函数的同步性、异步性、单例)
  9. 个人h5第三方支付接口_个人免签支付接口系统搭建源码多种方式
  10. 手机变身电脑摄像头 Droidcam使用
  11. 手写键盘计算机,鼠标手写输入法计算机版本v2017最新版本
  12. dataframe_转换日期格式
  13. JS时间戳进行判断,判断是否超时三十分钟
  14. 利用虚拟机virtualbox配置智汀家庭云,让米家设备连接Homekit
  15. 华为鸿蒙推送机型,华为鸿蒙系统开始推送,这15款机型可率先升级,有你的吗?...
  16. 宠物诊所java项目_JavaWeb项目-宠物诊所管理系统
  17. JS 日期转换成时间戳
  18. 王半仙儿的日记-0005
  19. 六款高效学习软件——程序员必备
  20. ORACLE 培训教程(1)

热门文章

  1. Spring Boot项目同时使用http和https
  2. 宣布推出NVIDIA DGX GH200:首款100TB显卡显存系统
  3. 冰箱专属的空气净化器,让食材更新鲜
  4. 详解 memset 函数
  5. python运维自动化-马哥教育官网-专业Linux培训班,Python培训机构
  6. 拉格朗日插值最小二乘法原理简述
  7. java guns框架_GUNS后台管理框架部署与发布
  8. 聊聊老歌----胎王小齐
  9. Selenium之Chrome模拟手机浏览器
  10. 无镉量子点|油溶性Cu掺杂ZnInS量子点PL500nm--700nm