计算机视觉——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.2.1
- 3.2.2
- 3.2.3
- 3.2.4
- 3.2.5
- 3.3 纹理角点丰富
- 3.3.1
- 3.3.2
- 3.3.3
- 3.3.4
- 3.3.5
- 4、实验结果分析以及实验中遇到的问题
- 4.1 实验结果分析
- 4.2 实验中遇到的问题
1、原理介绍
角点介绍
图像的局部特征主要分为以下几类:
角点:Harris算子,SUSAN算子, FAST算子。
梯度特征点: SIFT、SURF、GLOH、ASIFT、PSIFT算子 等。
边缘特征(线型):Canny算子, Marr算子。
纹理特征:灰度共生矩阵,小波Gabor算子。
那么对于图像的角点判断,我们假想出一个正方形的小窗口,如果小窗口在图像以任意方向进行移动,导致图像灰度的明显变化,那么我们就可以认为小窗口内部包含了“角点”,或者当窗口足够小时,可以认为该窗口就是角点。下面我们通过一组图来了解一下:
可以看到:
当窗口位于平坦区时,任意方向移动都没有灰度变化。
当窗口位于边缘区时,沿边缘方向移动无灰度变化。
当窗口位于角点时,沿任意方向移动都会有明显的灰度变化。
Harris算子
Harris 角点检测算法(也称 Harris & Stephens 角点检测器)是一个极为简单的角点检测算法。该算法的主要思想是,如果像素周围显示存在多于一个方向的边,我们认为该点为兴趣点。该点就称为角点。
假设图像像素点(x,y)的灰度为 I(x,y),以像素点为中心的窗口沿 x 和 y 方向分别移动 u 和 v 的灰度强度变化的表达式为:
其中 E(u,v)是灰度变化,w(x,y) 是窗口函数,一般是高斯函数,所以可以把w(x,y)看做是高斯滤波器。I(x,y)是图像灰度, I(x+u,y+v)是平移后的图像灰度。
收到泰勒公式的启发,在这里我们可以将 I(x+u,y+v)函数在(x,y)处泰勒展开,为了提高抗干扰的能力并且简化运算,我们取到了一阶导数部分,后面的无穷小小量O(u2+v2)可以忽略,整理得到表达式如下:
将[ Ixu+Iyv ]展开后整理可以用矩阵表达为:
其中M是一个2X2的矩阵,称为像素点的自相关矩阵,可以由图像的导数求得。M=窗口函数*偏导矩阵,表达式为:
因为u,v是局部微小的移动变量,所以我们对M进行讨论,M是一个2X2的矩阵,M的表达式中与点的位置(x,y)具体强相关性,记M得特征值为λ1,λ2,关于特征值的意义太过抽象,这里就不展开,但是我们可以简单理解为该点的灰度值变化速度,那么a1和a2可以分别看做是x方向和y方向的灰度变化速率,就可以用a1,a2两者的大小关系来进行分类:
1.当两个特征值λ1和λ2都偏小的时候,表示窗口沿任意方向移动都会使灰度变化很细微,该点处于图像的平坦区域。
2.当λ1>>λ2或者λ1<<λ2时,说明该点向水平(垂直)方向移动时变化会很明显,而向垂直(水平)方向则变化不明显,该点处于图像的边缘区。
3.当两个特征值λ1和λ2都很大的时候,表示窗口沿任意方向移动都会使灰度变化很明显,该点位置就是图像角点的位置。
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:\Python\m5.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.shapeplot([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()
3、实验结果
3.1 纹理平坦的图片
3.1.1
原图如下:
结果:
3.1.2
原图如下:
结果:
3.1.3
原图如下:
结果:
3.1.4
原图如下:
结果:
3.1.5
原图如下:
结果:
3.2 垂直或水平边缘多(如建筑物)
3.2.1
原图如下:
结果如下:
3.2.2
原图如下:
结果:
3.2.3
原图如下:
结果:
3.2.4
原图如下:
结果:
3.2.5
原图如下:
结果:
3.3 纹理角点丰富
3.3.1
原图如下:
结果:
3.3.2
原图如下:
结果:
3.3.3
原图如下:
结果:
3.3.4
原图如下:
结果:
3.3.5
原图如下:
结果:
4、实验结果分析以及实验中遇到的问题
4.1 实验结果分析
1、在纹理平坦的地方进行检测,通过五个不同的角度分别进行检测可以看出平坦的地方的角点从各个地方进行检测几乎一致,不会发生变化。光线较亮的地方的算子比暗的地方算子少。
2、在垂直或水平边缘多(如建筑物)进行检测,同样也是通过五个不同的角度分别进行检测,可以看出沿着边缘变化算子多少没有发生明显变化,光线较亮的地方算子比暗的地方多。
3、纹理角点丰富进行检测,在五个不同方向对同一事物进行检测,可以看出沿着角点算子发生了明显的变化,远近对算子检测不造成影响,光线亮的地方算子较多。
4.2 实验中遇到的问题
1、在编写代码的过程中,要注意图片的路径问题,尽量写绝对路径,并且图片的命名应该使用英文。否则容易出现下图的错误。
计算机视觉——Harris角点检测相关推荐
- Python计算机视觉——Harris角点检测
Python计算机视觉--Harris角点检测 文章目录 Python计算机视觉--Harris角点检测 写在前面 1 Harris角点检测基本思想 2 Harris角点检测公式推导 3 实验分析 写 ...
- 计算机视觉 — Harris角点检测
文章目录 一.角点 二.Harris角点检测基本思想 三.Harris算法数学表达 四.实验结果分析 五.代码 六.总结 一.角点 角点(corner points):局部窗口沿各方向移动,均发生明显 ...
- 计算机视觉——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方法检测角点. 理论 有哪些特征? 在计算机视 ...
最新文章
- IOS上传图片的方法
- 回调函数在MFC中的使用
- ncnn windows
- STM32中使用静态“字符串的方式”
- centos7下kubernetes(6。运行应用)
- 深入浅出设计模式原则之开闭原则(OCP)
- 2017总结、2018展望
- Nodejs 博客系统遇到的问题及解决
- python 搜寻蓝牙_3 Python Web搜寻器和搜寻器
- Word英文句子之间空两格的方法,有截图
- oracle国家字符集
- oozie timezone时区配置
- 非IE浏览器实现IE功能(浏览器加载OCX控件)——IE Tab
- 龙哥库他发matlab程序,编程实现四阶龙哥库塔法解方程
- JAVA RPC 生产级高可用RPC框架使用分享
- 千万别小看一个面相好的女人!
- UCenter 1.6 数据字典
- 550+集Java学习全套视频课程,新手入门收藏
- Ubuntu20安装wxPython
- Barbalat引理与类李雅普诺夫引理,及它们在自适应控制系统设计的应用