Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >图像匹配中Harris角点特征提取

图像匹配中Harris角点特征提取

作者头像
mythsman
发布于 2022-11-14 06:27:05
发布于 2022-11-14 06:27:05
85400
代码可运行
举报
运行总次数:0
代码可运行

在进行图像检测或者是识别的时候,我们需要提取出一些有特征的点加以识别,最常用的就是基于点的识别。这里所谓的点,其实就是一些重要的点,比如轮廓的拐角,线段的末端等。这些特征比较容易识别,而且不容易受到光照等环境的影响,因此在许多的特征匹配算法中十分常见。

常见的特征点提取算法有Harris算 子(改进后的Shi-Tomasi算法)、Moravec算子、Forstner算子、小波变换算子等。现在就先介绍一下最常用的Harris角点检测算法。

简介

Harris算法的思想很简单,也很容易理解。

我们知道角点附近的区域相比于其他地方有这样一个显著的特点,就是无论沿着哪一个方向看,他灰度的变化率始终是很大的。也就是说假设我们有一个矩形窗口罩在角点附近,将这个窗口顺着任意方向移动一小段距离得到一个新的区域,将这个新的区域与旧的区域对应点的灰度做差得到的值始终很大。相比之下,平滑区域的变化就很小,而边缘区域沿着某些方向变化率大、某些方向变化率小。

Harris算法利用的就是这个特点,他首先定义了一个窗口函数来表示他选择的窗口区域,表示点的坐标,表示这个坐标所占的权值。有时候我们用0-1赋值,表示选定一块区域,也有时候我们用高斯滤波减少噪点的影响;然后定义了一个方向向量,以及表示窗口沿着方向移动后的梯度变化情况。并将做如下定义:

其中表示点的灰度值。

根据上面的介绍我们知道角点的特征就是的值取较大值。那么为了更方便的计算,我们对他需要进行一下化简:

泰勒展开:

其中分别为灰度沿x,y方向的导数。

转化为矩阵形式:

最后定义一个估价函数R:

其中,k是一个控制参数。

为M的特征值。

这个估价函数个特性,就是当R较小时,图像是平坦的;当R小于0时,图像是一个边缘;当R很大时,这个图像是一个角点。因此通常我们会对R设置一个阈值,大于这个阈值的点我们可以看做是角点。

OpenCV调用

OpenCV里封装了Harris算法,调用下看看效果,就不自己实现了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding:utf-8
import cv2
import numpy as np

img=cv2.imread('test.png',cv2.IMREAD_GRAYSCALE)
cv2.imshow('gray.png',img)#控制背景为黑色
cv2.imwrite('gray.png',img)
im=np.float32(img)
dst=cv2.cornerHarris(im,3,3,0.04)#生成估价矩阵

height,width=dst.shape
mark=dst>0.01*dst.max()#寻找具有较大权值的像素点
height,width=mark.shape
for i in xrange(height):
    for j in xrange(width):
        if mark[i][j]:
            cv2.circle(img,(j,i),5,255)#标记得到的点
cv2.imshow('Harris.png',img)
cv2.imwrite('Harris.png',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

重要的步骤就是在估价矩阵里找到较大的那些点。

效果图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV:特征及角点检测
大多数人都会玩拼图游戏。会得到很多小图像,需要正确组装它们以形成大的真实图像。问题是,你是如何去拼图的?同样地,将相同的理论投影到计算机程序上,以使得计算机也可以玩拼图游戏呢?如果计算机可以玩拼图游戏,为什么不能给计算机提供很多自然风光的真实图像,并告诉计算机将所有这些图像拼接成一个大图像呢?如果计算机可以将多个自然图像缝合在一起,那么如何给建筑物或任何结构提供大量图片并告诉计算机从中创建3D模型呢?
用户3578099
2023/09/01
5120
OpenCV:特征及角点检测
cv2.cornerHarris()详解 python+OpenCV 中的 Harris 角点检测
参考文献----------OpenCV-Python-Toturial-中文版.pdf 参考博客----------http://www.bubuko.com/infodetail-2498014.
徐飞机
2018/05/15
8.9K0
使用Python+OpenCV进行图像处理(三)| 视觉入门
检测是计算机视觉任务中的主要任务之一,而且应用很广泛。检测技术可以帮助人类检测那些容易被肉眼忽略的错误;也可以”帮助“自动驾驶汽车感知空间信息。无疑自动化的检测技术的广泛应用将为我们带来效率与安全。
磐创AI
2019/05/14
2.2K1
使用Python+OpenCV进行图像处理(三)| 视觉入门
OpenCV 之 角点检测
角点 (corners) 的定义有两个版本:一是 两条边缘的交点,二是 邻域内具有两个主方向的特征点。
用户8408908
2021/03/18
6330
PCL—低层次视觉—关键点检测(Harris)
  除去NARF这种和特征检测联系比较紧密的方法外,一般来说特征检测都会对曲率变化比较剧烈的点更敏感。Harris算法是图像检测识别算法中非常重要的一个算法,其对物体姿态变化鲁棒性好,对旋转不敏感,可以很好的检测出物体的角点。甚至对于标定算法而言,HARRIS角点检测是使之能成功进行的基础。
点云PCL博主
2019/07/31
1.2K0
PCL—低层次视觉—关键点检测(Harris)
通俗易懂的Harris 角点检测
如果这个特征点具有局部差异性,那么以这个特征点为中心,把窗口向360度任意一个方向移动,窗口的变化比较大,则这个特征点的周围环境变化比较大。
3D视觉工坊
2020/12/11
8180
通俗易懂的Harris 角点检测
角点检测集锦(Harris,Shi-Tomasi,亚像素级角点检测)原理及相关实现
一个像素所在的区域一般情况下可以分为以下三种情况,平坦,边,角点三种情况,如下图最右边。 在角点处,沿任意方向运动都会引起像素颜色的明显变化等价于:在角点附近,图像梯度具有至少两个主方向。
种花家的奋斗兔
2020/11/13
1.2K0
OpenCV角点检测源代码分析(Harris和ShiTomasi角点)
OpenCV中常用的角点检测为Harris角点和ShiTomasi角点。 以OpenCV源代码文件 .\opencv\sources\samples\cpp\tutorial_code\TrackingMotion\cornerDetector_Demo.cpp为例,主要分析其中的这两种角点检测源代码。角点检测数学原理请参考我之前转载的一篇博客 http://www.cnblogs.com/riddick/p/7645904.html,分析的很详细,不再赘述。本文主要分析其源代码: 1. Harris角点检
一棹烟波
2018/03/19
2K0
OpenCV角点检测源代码分析(Harris和ShiTomasi角点)
Harris角点提取后怎么匹配?
对于角点匹配算法的研究本文主要采用Harris算法提取图像中的角点,通过相似测度得到粗匹配点集,然后简单分析了两种提纯匹配点的简单聚类法和视差梯度约束法。 1. Harris算法角点检测 人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一
智能算法
2018/04/03
2.5K0
Harris角点提取后怎么匹配?
特征检测之Harris角点检测
如果有n阶矩阵A,其矩阵的元素都为实数,且矩阵A的转置等于其本身,则称A为实对称矩阵。
Datawhale
2020/07/09
1.4K0
特征检测之Harris角点检测
C++ OpenCV特征提取之Harris角点检测
算法基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点。
Vaccae
2019/07/24
2.2K0
Sober算子边缘检测与Harris角点检测1「建议收藏」
Harris opencv 的对应代码 cv2.cornerHarris(src, blockSize, ksize, k[, dst[, borderType]]) 参数类型 src – 输入灰度图像,float32类型 blockSize – 用于角点检测的邻域大小,就是上面提到的窗口的尺寸 ksize – 用于计算梯度图的Sobel算子的尺寸 k – 用于计算角点响应函数的参数k,取值范围常在0.04~0.06之间
全栈程序员站长
2022/09/14
5020
Sober算子边缘检测与Harris角点检测1「建议收藏」
Harris角点检测
算法:Harris角点检测是属于局部特征检测,利用移动的窗口在图像中计算灰度变化值,其中关键流程包括转化为灰度图像、计算差分图像、高斯平滑、计算局部极值、确认角点。
裴来凡
2022/05/28
3070
Harris角点检测
Harris角点检测原理与流程
1. 角点概述 角点是图像很重要的特征,对图像图形的理解和分析有很重要的作用。角点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。角点在三维场景重建运动估计,目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。 在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义: a. 角点可以是两个边缘的角点; b. 角点是邻域内具有两个主方向的特征
智能算法
2018/04/02
3K0
Harris角点检测原理与流程
Harris角点学习[通俗易懂]
人们普遍认为角点是二维图像亮度变化剧烈的点或图像边缘曲线上曲率极大值的点。这些点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。其在三维场景重建、运动估计、目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。
全栈程序员站长
2022/11/09
2940
Harris角点学习[通俗易懂]
harris角点检测_那就更详细一点吧
在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义:
全栈程序员站长
2022/11/07
1.3K0
图像特征点|Harris特征点
小白在之前的为小伙伴在前面的推送中带来了moravec算子,忘记了的小伙伴可以回过去看一下《图像特征点|moravec特征点》,但是moravec算子也具有很多不足之处。接下来小白将介绍Harris角点中针对其不足之处进行的改进地方。
小白学视觉
2019/10/24
1K0
Harris 像素级角点检测
在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义:
为为为什么
2023/04/12
8930
Harris 像素级角点检测
特征提取——局部特征
https://blog.csdn.net/coming_is_winter/article/details/72850511 https://blog.csdn.net/zouxy09/article/details/7929348/
AomanHao
2022/01/14
1.3K0
特征提取——局部特征
计算机视觉 OpenCV Android | 特征检测与匹配之角点检测——Harris角点检测与Shi-Tomasi角点检测
Harris角点检测与Shi-Tomasi角点检测都是经典的角点特征提取算法, 但两者在API的使用上有出入(详见文中代码或GitHub项目);
凌川江雪
2019/03/04
1.2K0
计算机视觉 OpenCV Android | 特征检测与匹配之角点检测——Harris角点检测与Shi-Tomasi角点检测
相关推荐
OpenCV:特征及角点检测
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验