计算机视觉 — Harris角点检测
文章目录
- 一、角点
- 二、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角点检测相关推荐
- Python计算机视觉——Harris角点检测
Python计算机视觉--Harris角点检测 文章目录 Python计算机视觉--Harris角点检测 写在前面 1 Harris角点检测基本思想 2 Harris角点检测公式推导 3 实验分析 写 ...
- 计算机视觉——Harris角点检测
文章目录 1.原理介绍 角点介绍 Harris算子 2.代码设计 3.实验结果 3.1 纹理平坦的图片 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.2 垂直或水平边缘多(如建筑物) ...
- 计算机视觉——harris角点检测之harris角点响应函数R
文章目录 一.harris角点检测原理 1.1基本思想 1.2 数学模型 3.关于harris角点响应函数R 二.harris角点检测源代码 2.1 计算harris角点响应函数R 2.2harris ...
- 计算机视觉(角点检测)- 1 - Harris角点检测
计算机视觉(角点检测)- 1 - Harris角点检测 学习前言 一.Harris角点检测 1.什么是角点? 2.Harris角点检测的基本原理&基本思想 3.Harris角点检测 ...
- 计算机视觉(二)HARRIS角点检测算法与SIFT
文章目录 前言 一.HARRIS角点检测算法 1.什么是角点(corner points) 2.角点检测算法的基本思想 3.什么是好的角点检测算法 4.角点特征的数学刻画 5.度量角点响应 6.HAR ...
- 为什么Harris角点检测用特征值? 为什么Harris像素值变化量矩阵代表椭圆?【OpenCV】【计算机视觉】
1. 关于Harris角点检测采用特征值作为判定标准的思考 窗口滑动的像素灰度值变化函数E的方程实际上是二次型(网上很多文章介绍该函数的具体形式和由来,这里不再赘述,见参考资料1).主对角线元素(特征 ...
- 计算机视觉图像基本处理--Harris角点检测
文章目录 1.Harris角点检测基本思想 1.1基本思想 1.2 数学表达 2.简单代码实现 2.1 对于纹理平坦的图 2.1.1 正面图像 运行结果如下 结果分析 2.1.2 侧面图像 运行结果如 ...
- OpenCV角点检测之Harris角点检测
本篇文章中,我们一起探讨了OpenCV中Harris角点检测相关的知识点,学习了OpenCV中实现Harris角点检测的cornerHarris函数的使用方法.此博文一共有两个配套的麻雀虽小但五脏俱全 ...
- OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测
Harris 角点检测子 目标 本教程中我们将涉及: 有哪些特征?它们有什么用? 使用函数 cornerHarris 通过 Harris-Stephens方法检测角点. 理论 有哪些特征? 在计算机视 ...
最新文章
- Python技术栈与Spark交叉数据分析双向整合技术实战--大数据ML样本集案例实战
- Dominating Patterns
- 【Ubuntu】 Ubuntu16.04设置窗口自适应
- RocketMQ 高可用性
- python两人一碰_python运用pygame库实现双人弹球小游戏
- 中国教育与软件企业的共同误区
- 【SQL】ROWNUM和ROWID
- 【Baltic2003】【BZOJ1370】Gang团伙(并查集,拆点)
- 开课吧:Html5有哪些新特性?
- 巨头垂涎却不能染指,loT数据库风口已至
- 小程序Git版本管理
- 微信小程序(十二)uni-app框架开发及组件库
- c语言 获取硬盘号,C语言获得硬盘序列号
- 在ESP32/ESP8266上使用MicroPython利用MQTT发布BME280传感器数据(温度,湿度和压力)
- html5页面的dtd定义是,DTD的作用
- Reno5、Reno5 Pro和Reno5 Pro+ 的区别
- Character.UnicodeBlock中cjk的说明
- 与众不同的微前端设计思维
- stp实验心得_STP 实验
- ArcBlock 分享 | OCAP Playground让区块链开发变得更友好
热门文章
- android自定义大转盘,Android 自定义View 抽奖大转盘(1)
- pack与aligned的区别
- 前后端传参(二)之数组对象
- python标准库不需要导入即可使用其中的所有对象和方法_2021智慧树网课答案创业基础考试期末答案...
- Android 7.1开机之后APN的加载及拨号上网流程分析
- 终端模拟器常用快捷键
- 暗金色 rgb_杜伽TAURUS K310樱桃RGB红轴体验:做工精良、手感优秀
- 深入分析 RTPS协议
- 机器学习作业(第十八次课堂作业)
- android迅雷下载搭建开发环境