文章目录

  • 一、角点
  • 二、Harris角点检测基本思想
  • 三、Harris算法数学表达
  • 四、实验结果分析
  • 五、代码
  • 六、总结

一、角点

角点(corner points):局部窗口沿各方向移动,均发生明显变化的点;图像局部曲率突变的点。

典型的角点检测算法:Harris角点检测,CSS角点检测等。

好的角点检测算法:

  • 检测出图像中“真实的”角点
  • 准确的定位性能
  • 很高的稳定性
  • 具有对噪声的鲁棒性
  • 具有较高的计算能力

二、Harris角点检测基本思想

Harris特征角最早在paper A Combined Corner and Edge Detector中被Chris Harris & Mike Stephens提出。

Harris角点检测的基本思想:算法基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点。

三、Harris算法数学表达

将图像窗口平移[u,v]产生灰度变化E[u,v]

求解I(x+u,y+v)以及E[u,v]:

  • 一元函数泰勒展开:
  • 二元函数泰勒展开:



    将I(x+u,y+v)函数在(x,y)处泰勒展开,得:


    于是对于局部微小的移动量[u,v],可以近似得到下面的表达:

    其中M是2*2的矩阵,可由图像的导数求得:

    窗口移动导致的图像变化量:实对称矩阵M的特征值分析

    记M的特征值为λ1,λ2

四、实验结果分析

  • 第一组:
    原图:

    实验结果:
  • 第二组:纹理平坦
    原图:

实验结果:



  • 第三组:垂直或水平边缘多
    原图:

实验结果:



  • 第四组:纹理角点丰富
    原图:

实验结果:



五、代码

# -*- 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('C:/Users/Desktop/test.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角点检测时,使用了微分算子对图像进行微分运算,而微分运算对图像密度的拉升或收缩和对亮度的抬高或下降不敏感。换言之,对亮度和对比度的仿射变换并不改变Harris响应的极值点出现的位置,但是,由于阈值的选择,可能会影响角点检测的数量。

旋转不变性:
Harris角点检测算子使用的是角点附近的区域灰度二阶矩矩阵。而二阶矩矩阵可以表示成一个椭圆,椭圆的长短轴正是二阶矩矩阵特征值平方根的倒数。当特征椭圆转动时,特征值并不发生变化,所以判断角点响应值R也不发生变化,由此说明Harris角点检测算子具有旋转不变性。

不具有尺度不变性
如下图所示,当右图被缩小时,在检测窗口尺寸不变的前提下,在窗口内所包含图像的内容是完全不同的。左侧的图像可能被检测为边缘或曲线,而右侧的图像则可能被检测为一个角点。

计算机视觉 — Harris角点检测相关推荐

  1. Python计算机视觉——Harris角点检测

    Python计算机视觉--Harris角点检测 文章目录 Python计算机视觉--Harris角点检测 写在前面 1 Harris角点检测基本思想 2 Harris角点检测公式推导 3 实验分析 写 ...

  2. 计算机视觉——Harris角点检测

    文章目录 1.原理介绍 角点介绍 Harris算子 2.代码设计 3.实验结果 3.1 纹理平坦的图片 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.2 垂直或水平边缘多(如建筑物) ...

  3. 计算机视觉——harris角点检测之harris角点响应函数R

    文章目录 一.harris角点检测原理 1.1基本思想 1.2 数学模型 3.关于harris角点响应函数R 二.harris角点检测源代码 2.1 计算harris角点响应函数R 2.2harris ...

  4. 计算机视觉(角点检测)- 1 - Harris角点检测

    计算机视觉(角点检测)- 1 - Harris角点检测 学习前言 一.Harris角点检测   1.什么是角点?   2.Harris角点检测的基本原理&基本思想   3.Harris角点检测 ...

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

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

  6. 为什么Harris角点检测用特征值? 为什么Harris像素值变化量矩阵代表椭圆?【OpenCV】【计算机视觉】

    1. 关于Harris角点检测采用特征值作为判定标准的思考 窗口滑动的像素灰度值变化函数E的方程实际上是二次型(网上很多文章介绍该函数的具体形式和由来,这里不再赘述,见参考资料1).主对角线元素(特征 ...

  7. 计算机视觉图像基本处理--Harris角点检测

    文章目录 1.Harris角点检测基本思想 1.1基本思想 1.2 数学表达 2.简单代码实现 2.1 对于纹理平坦的图 2.1.1 正面图像 运行结果如下 结果分析 2.1.2 侧面图像 运行结果如 ...

  8. OpenCV角点检测之Harris角点检测

    本篇文章中,我们一起探讨了OpenCV中Harris角点检测相关的知识点,学习了OpenCV中实现Harris角点检测的cornerHarris函数的使用方法.此博文一共有两个配套的麻雀虽小但五脏俱全 ...

  9. OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测

    Harris 角点检测子 目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视 ...

最新文章

  1. Python技术栈与Spark交叉数据分析双向整合技术实战--大数据ML样本集案例实战
  2. Dominating Patterns
  3. 【Ubuntu】 Ubuntu16.04设置窗口自适应
  4. RocketMQ 高可用性
  5. python两人一碰_python运用pygame库实现双人弹球小游戏
  6. 中国教育与软件企业的共同误区
  7. 【SQL】ROWNUM和ROWID
  8. 【Baltic2003】【BZOJ1370】Gang团伙(并查集,拆点)
  9. 开课吧:Html5有哪些新特性?
  10. 巨头垂涎却不能染指,loT数据库风口已至
  11. 小程序Git版本管理
  12. 微信小程序(十二)uni-app框架开发及组件库
  13. c语言 获取硬盘号,C语言获得硬盘序列号
  14. 在ESP32/ESP8266上使用MicroPython利用MQTT发布BME280传感器数据(温度,湿度和压力)
  15. html5页面的dtd定义是,DTD的作用
  16. Reno5、Reno5 Pro和Reno5 Pro+ 的区别
  17. Character.UnicodeBlock中cjk的说明
  18. 与众不同的微前端设计思维
  19. stp实验心得_STP 实验
  20. ArcBlock 分享 | OCAP Playground让区块链开发变得更友好

热门文章

  1. android自定义大转盘,Android 自定义View 抽奖大转盘(1)
  2. pack与aligned的区别
  3. 前后端传参(二)之数组对象
  4. python标准库不需要导入即可使用其中的所有对象和方法_2021智慧树网课答案创业基础考试期末答案...
  5. Android 7.1开机之后APN的加载及拨号上网流程分析
  6. 终端模拟器常用快捷键
  7. 暗金色 rgb_杜伽TAURUS K310樱桃RGB红轴体验:做工精良、手感优秀
  8. 深入分析 RTPS协议
  9. 机器学习作业(第十八次课堂作业)
  10. android迅雷下载搭建开发环境