【OpenCV 例程300篇】238. OpenCV 中的 Harris 角点检测

『youcans 的 OpenCV 例程300篇 - 总目录』


【youcans 的 OpenCV 例程 300篇】238. OpenCV 中的 Harris 角点检测

角是直线方向的快速变化。角点通常被定义为两条边的交点,或者说角点的邻域应该具有两个不同区域的不同方向的边界。

角是高度有效的特征。角点检测(Corner Detection)广泛应用于运动检测、图像匹配、视频跟踪、三维重建和目标识别。


6.1 哈里斯-斯蒂芬斯角检测器(Harris)

在基于灰度变换的角点检测算法中,Harris 算法重复性良好、检测效率较高,应用较为广泛。

哈里斯-斯蒂芬斯角检测器(Harris and Stephens)的原理是,通过检测窗口在图像上移动,计算移动前后窗口中像素的灰度变化。角点是两条边的交点,其特征是检测窗口沿任意方向移动都会导致灰度的显著变化。

对于点 (x,y)(x,y)(x,y),令 w(x,y)w(x,y)w(x,y) 为矩形检测窗口或高斯检测窗口,I(x,y)I(x,y)I(x,y) 是检测窗口在点 (x,y)(x,y)(x,y) 的灰度值,I(x+u,y+v)I(x+u,y+v)I(x+u,y+v) 是检测窗口滑动 (u,v)(u,v)(u,v) 距离之后的灰度值。

计算窗口 w(x,y)w(x,y)w(x,y) 滑动 (u,v)(u,v)(u,v) 距离之后的灰度变化:
E(u,v)=∑x,yw(x,y)[I(x+u,y+v)−I(x,y)]2E(u,v) = \sum _{x,y} w(x,y) [I(x+u, y+v) - I(x,y)]^2 E(u,v)=x,yw(x,y)[I(x+u,y+v)I(x,y)]2
对于很小的位移 (u,v)(u,v)(u,v),使用一阶泰勒展开进行简化:

E(u,v)=∑x,yw(x,y)[I(x,y)+uIx+vIy+O(u2,v2)−I(x,y)]2≈∑x,yw(x,y)[u2Ix2+2uvIxIy+v2Iy2]≈[u,v]∑x,yw(x,y)[IxIxIxIyIxIyIyIy][uv]\begin{aligned}E(u,v) = &\sum_{x,y} w(x,y) [I(x,y) + uI_x + vI_y +O(u^2,v^2)- I(x,y)]^2 \\\approx & \sum_{x,y} w(x,y) [u^2 I_x^2 + 2uv I_x I_y + v^2 I_y^2] \\\approx & [u,v] \sum_{x,y}w(x,y)\begin{bmatrix}I_x I_x & I_x I_y \\I_x I_y & I_y I_y\end{bmatrix}\begin{bmatrix}u\\v\end{bmatrix}\end{aligned} E(u,v)=x,yw(x,y)[I(x,y)+uIx+vIy+O(u2,v2)I(x,y)]2x,yw(x,y)[u2Ix2+2uvIxIy+v2Iy2][u,v]x,yw(x,y)[IxIxIxIyIxIyIyIy][uv]
Ix,IyI_x,I_yIx,Iy 分别是在 x, y 方向的导数,可以由 Sobel 梯度算子求出。

记 M 为梯度的协方差矩阵:
M=∑x,yw(x,y)[IxIxIxIyIxIyIyIy]M =\sum_{x,y} w(x,y)\begin{bmatrix}I_x I_x & I_x I_y \\I_x I_y & I_y I_y\end{bmatrix} M=x,yw(x,y)[IxIxIxIyIxIyIyIy]

在几何模型中通过判断两个特征值的大小,来判定像素的属性。矩阵 M 是Ix,IyI_x,I_yIxIy 的二次函数,可以表示为椭圆形状,椭圆的长短半轴由矩阵 M 的特征值 λ1,λ2\lambda _1,\lambda _2λ1λ2 决定,方向由特征向量决定。

定义角点响应函数 R:
R=det(M)−k[trace(M)]2det(M)=λ1∗λ2trace(M)=λ1+λ2\begin{aligned}R =& det(M) - k [trace(M)]^2 \\&det(M) = \lambda _1 * \lambda _2 \\&trace(M) = \lambda _1 + \lambda _2\end{aligned} R=det(M)k[trace(M)]2det(M)=λ1λ2trace(M)=λ1+λ2
k 是调节参数(通常取 0.04~0.06)。

角点响应函数 R 只与矩阵 M 的特征值 λ1,λ2\lambda _1,\lambda _2λ1λ2 有关,可以用来判断区域是拐角、边缘还是平坦:

  • λ1,λ2\lambda _1,\lambda _2λ1λ2 较小时, ∣R∣|R|R 较小,即各个方向上灰度基本不变,表明检测器处于平坦区域;
  • λ1>>λ2\lambda _1 >> \lambda _2λ1>>λ2 或 $ \lambda _2 >> \lambda _1$ 时, R<0R <0R<0 ,即灰度在某个方向变化,但在其正交方向不变化,表明检测器处于边缘区域;
  • λ1,λ2\lambda _1,\lambda _2λ1λ2 较大且 λ1∼λ2\lambda _1 \sim \lambda _2λ1λ2时, ∣R∣|R|R 很大,即灰度在所有方向都发生重大变化,表明检测器包含角点(或孤立点。

6.2 OpenCV 中的 Harris 角检测器

OpenCV 中提供了 Harris 角点检测函数 cv.cornerHarris()


函数说明:

cv.cornerHarris(src, blockSize, ksize, k[, dst=None, borderType=BORDER_DEFAULT]	) → dst
cv.cornerEigenValsAndVecs(src, blockSize, ksize[, dst=None, borderType=BORDER_DEFAULT]) → dst
cv.cornerMinEigenVal(src, blockSize[, dst=None, ksize=3, borderType=BORDER_DEFAULT]) → dst

函数 cv.cornerHarris 运行 Harris 角检测器。

函数 cv.cornerEigenValsAndVecs 计算图像矩阵的特征值和特征向量。

函数 cv.cornerMinEigenVal 计算用于角点检测的梯度矩阵的最小特征值。

对于每个像素 (x,y) 计算梯度协方差矩阵 M(x,y)M(x,y)M(x,y)。然后计算特征:
dst(x,y)=detM(x,y)−k⋅(trM(x,y))2dst(x,y) = det M^{(x,y)} - k \cdot (tr M^{(x,y)})^2 dst(x,y)=detM(x,y)k(trM(x,y))2

则角点在特征响应图像中是局部极大值。 实践中定义当 R 大于设定阈值,且为局部最大值的点为角点 。

参数说明:

  • src:输入图像,单通道的 8位图像或浮点数图像
  • dst:输出图像,Harris 检测器的响应,大小与 src 相同,格式为 CV_32FC1
  • blockSize:邻域尺寸
  • ksize:Sobel 算子的孔径参数
  • k:Harris 检测器调节参数,通常取 0.04~0.06
  • borderType:边界扩充类型
    • cv.BORDER_CONSTANT
    • cv.BORDER_REPLICATE
    • cv.BORDER_REFLECT
    • cv.BORDER_REFLECT_101
    • cv.BORDER_TRANSPARENT

注意事项:

函数 cv.cornerMinEigenVal 类似于 cv.cornerEigenValsAndVecs,但它仅计算和保存矩阵 M 的最小特征值,即 min(λ1,λ2)min(\lambda_1, \lambda_2)min(λ1,λ2)


例程 14.19:特征检测之 Harris 角检测器

    # 14.19 角点检测之 Harris 算法img = cv2.imread("../images/Chess01.png", flags=1)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # (600, 540)# gray = np.float32(gray)  # uint8,float32 都支持blockSize = [2, 3, 5]  # 滑动窗口大小ksize = [3, 5, 9]  # Sobel 核函数大小plt.figure(figsize=(9, 9))for i in range(len(blockSize)):for j in range(len(ksize)):dst = cv2.cornerHarris(gray, blockSize[i], ksize[j], k=0.04)imgCorner = np.copy(img)imgCorner[dst > 0.01*dst.max()] = [0, 0, 255]  # 筛选角点,红色标记plt.subplot(3,3,i*len(ksize)+j+1), plt.axis('off')plt.imshow(cv2.cvtColor(imgCorner, cv2.COLOR_BGR2RGB))plt.title("blockSize={},ksize={}".format(blockSize[i], ksize[j]))plt.tight_layout()plt.show()

在这里插入图片描述


【本节完】

版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125820758)
Copyright 2022 youcans, XUPT
Crated:2022-7-15

238. OpenCV 中的 Harris 角点检测
239. Harris 角点检测之精确定位(cornerSubPix)
240. OpenCV 中的 Shi-Tomas 角点检测

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis Jedis

相信大家有着同样的问题&#xff0c;Jedis是什么呢&#xff1f;下面为你详细解答关于Redis Jedis的内容。 Jedis到底是什么&#xff1f; 在常见命令中&#xff0c;使用各种Redis自带客户端的命令行方式访问Redis服务。 而在实际工作中却需要用到Java代码才能访问&#xff0c;…

基础线性规划实现(matlab,lingo)

目录 一、本次所需解的问题 二、matlab解题 1&#xff09;语法 2&#xff09;数学思维 3&#xff09;matlab解题 运行结果&#xff1a; 三、lingo解题 lingo解题如下&#xff1a; 运行结果&#xff1a; 最后&#xff1a; 一、本次所需解的问题 需解出下面该线性规划问…

cwntos linux kde桌面,Centos如何安装KDE的桌面

其实KDE其实在初次安装系统的时候就可以选择&#xff0c;我下面是进入系统后的安装方法&#xff1a;第一步&#xff1a;检查KDE首先查看自己是否安装了KDE# yum grouplist在grouplist的输出结果中的“Installed Groups:”部分中&#xff0c;如果你能找到“X Window System”和“…

【OpenCV 例程 300篇】239. Harris 角点检测之精确定位(cornerSubPix)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】239. Harris 角点检测之精确定位&#xff08;cornerSubPix&#xff09; 角是直线方向的快速变化。角点通常被定义为两条边的交点&#xff0c;或者说角点的邻域应该具有两个不同区域的不同方向的边界…

Redis Spring集成

近来Spring可谓是火了一把&#xff0c;那麽我们应该进行Redis缓存和Spring集成的呢&#xff1f;&#xff1f; 下面我们将讲解Spring对Redis的支持即我们如何在Spring项目中访问Redis。 项目如下 redis.properties 这里指定连接 Redis 服务器的相关信息 #ip地址 redis.host…

基础线性规划实现---python

目录 一、问题 何为线性规划问题&#xff1a; 二、python进行求解 1.通过观察matlab解线性规划步骤进行求解 2.python求解步骤 1&#xff09;求解用到的模块&#xff08;scipy 和 numpy&#xff09;&#xff1a; 2&#xff09;对 max z2x13x2-5x3 该问题确定c如下&…

linux查看mongodb的ip地址,[转载]在MongoDB的shell中显示服务器当前IP

不久前发生一起严重的事故&#xff0c;误删了生产MongoDB服务器上的一个collection&#xff0c;由于没有定时备份&#xff0c;导致几天的数据丢失。认真反省之后&#xff0c;写下这篇文章&#xff0c;希望能给大家一些警示。过程当时我正双开两个终端窗口&#xff0c;分别用mon…

【OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】240. OpenCV 中的 Shi-Tomas 角点检测 角是直线方向的快速变化。角点通常被定义为两条边的交点&#xff0c;或者说角点的邻域应该具有两个不同区域的不同方向的边界。 角是高度有效的特征。角点检测…

多元统计分析1

第一章 多元正态分布 文章目录 1.1 多元分布的基本概念 1.1.1 随机向量 1.1.2 分布函数与密度函数 联合分布函数&#xff1a; 联合密度函数&#xff1a; 条件密度函数&#xff1a; 分量的独立性&#xff1a; 1.1.3 随机向量的数字特征 1.随机向量的均值 2、随机…

Java并发容器和框架

ConcurrentHashMap 我们为什么要使用 ConcurrentHashMap呢&#xff1f; 原因有三&#xff1a; 并发编程中HashMap会导致死循环&#xff1b;HashTable效率又非常低&#xff1b;ConcurrentHashMap的锁分段技术可有效提升并发访问率。在并发编程使用HashMap会导致死循环。 在多线…

linux mysql 8安装教程,MySQL8系列安装与配置教程(Linux环境)

以CentOS8为例进行讲解。关闭firewalld关闭&#xff1a; systemctl stop firewalld开机禁用 &#xff1a; systemctl disable firewalld使用root用户按照如下步骤执行yum install -y wget选择一个目录&#xff0c;并进行下载wget https://dev.mysql.com/get/mysql80-community…

【OpenCV 例程 300篇】241. 尺度不变特征变换(SIFT)

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】241. 尺度不变特征变换&#xff08;SIFT&#xff09; 6.4.1 简介 尺度不变特征转换算法&#xff08;Scale-invariant feature transform&#xff0c;SIFT&#xff09;是图像处理中经典的局部特征描…

整数线性规划实现(matlab分枝界定法)

文章目录 一、本次问题 1.利用第一天所学知识求解&#xff1a; 2.本题理解&#xff1a; &#xff08;1&#xff09;分支界定法 背景&#xff1a; 基本理论&#xff08;解题步骤&#xff09;&#xff1a; 求解实现1&#xff1a; 1.第一步 2.第二步 3.第三步 4.第四步…

linux opencv gtk 没窗口,OpenCV GTK+2.x error

可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效&#xff0c;请关闭广告屏蔽插件后再试):问题:I had installed OpenCV following these steps ().After trying to compile one examples,i got this error :OpenCV Error: Unspecified error (The function …

硬盘分区

我们买回一台全新的笔记本的时候&#xff0c;我们会发现里面只有一个硬盘&#xff0c;这个时候为了满足我们的需求我们往往要对硬盘进行分区&#xff0c;那麽如何正确的对硬盘进行分区的呢&#xff1f; 下面教大家如何正确的对电脑硬盘进行分区操作。 操作方法 1、在桌面上找…

python入门:Anaconda和Jupyter notebook的安装与使用

文章目录 一、安装和使用Anaconda 1、anaconda是什么&#xff1f; 2、为什么需要安装anaconda&#xff1f; 3、如何安装anaconda&#xff1f; 通过官网下载页面 开源软件下载 安装步骤&#xff1a; 4、jupyter汉化 5、如何管理包&#xff1f; 1.列出已安装的包 2.安装…

arm linux sms,基于arm处理器的手机短消息加密系统 encryption system for sms based on arm.pdf...

基于arm处理器的手机短消息加密系统 encryption system for sms based on arm第 22卷 第 期 电子测量与仪器学报 Vol.22 No.224 - -200S年 月 JOURNAL OFELECTRONICMEASUREMENTANDINSTRUMENT 95基 于 ARM处理器 的手机短消息加密 系统杨浩森 刊世新 徐 继友电子科技大学计算机科…

前端开发中游览器的兼容问题总结

首先&#xff0c;为什么各种浏览器会产生兼容性问题&#xff1f; 产生这个问题的主要原因是市面上的浏览器的种类很多&#xff0c;但由于不同的浏览器的内核不一致&#xff0c;从而导致各个浏览器对网页的解析就产生了差异。 对于解决浏览器兼容性问题&#xff0c;我们要从三…

非线性规划(1)

目录 一、非线性规划的定义 二、非线性规划的模型 三、非线性规划函数 四、线性不等式约束 五、线性不等式和等式约束 六、带有非线性约束的求最值 七、非线性约束 总结&#xff1a; 一、非线性规划的定义 前面我们学了线性规划&#xff0c;整数规划&#xff0c;我们可…

北京化工大学通信工程linux,北京化工大学通信工程专业解读

通信工程专业1.专业的内涵是什么&#xff1f;它的未来怎样发展&#xff1f;通信工程与电子信息工程、电子信息科学与技术同属电子信息科学与工程类&#xff0c;学科基础理论基本相同&#xff0c;没有本质区别&#xff0c;且通信工程与电子信息工程的专业内涵相互交融&#xff0…