特征识别:Harris角点检测 概述 了解学习哈里斯角检测、cv2connerHarris()、cv2connerSubPix()。 原理 哈里斯角点是在任意方向上移动(u,v),都会有很明显的变化。如下图一个局部很小的区域,如果是在图片区域中移动灰度值没有变化,那么窗口内不存在角点。1 Harris角点检测关于角点特征提取最经典的算法之一就是Harris角点检测。上述程序首先把彩色RGB图像转换为单通道灰度图像, 然后使用Harris角点检测函数完成各个像素点上角点响应值的计算, 最后使用阈值过滤绘制那些响应值R比较大的像素点(角点)。 二、具体Harris角点检测实现介绍 1、图像的梯度计算: 直接调用opencv的sobel算子进行滤波: IxSobel (img, dst, CV_64FC1, 0, 1, 3);
Harris角点检测 航行学园
Harris响应值
Harris响应值-// *****非极大值抑制和满足阈值及某邻域内的局部极大值为角点***** // 第一个参数是响应函数的矩阵 // 第二个参数是输入的 Matthew Brown等人在MultiImage Matching using MultiScale Oriented Patches中提到使用自适应非极大值抑制(ANMS)算法对Harris角点检测所得到的大量关键点(Interest Point)做进一步筛选,以达到减少关键点数量,同时尽可能保持角点响应大的点,并且关键点分布均匀这三个目的。
对于每个窗口,都计算其对应的一个角点响应函数 R; 然后对该函数进行阈值处理,如果 R>threshold,表示该窗口对应一个角点特征。 32 Harris角点数学模型 建立数学模型,确定哪些窗口会引起较大的灰度值变化。 文章目录一、harris角点检测原理11基本思想12 数学模型3、关于harris角点响应函数R二、harris角点检测源代码21 计算harris角点响应函数R22harris角点检测三、harris角点响应函数R的分析31不同k值32对R不同的计算方法321 函数计算322 商计算33不同图像中的R值331角点丰富的图像332平坦的图像333边缘多Opencv特征提取与检测学习01:Harris角点检测 1什么是harris角点检测 harris角点检测是harris于1998年提出的检测图片角点位置的一个理论。 具体理论(我的理解) 如上图,W是我们定义的图像窗口,W(x,y)是窗口一个像素值,后面的一串是像素梯度。
3)计算每个像素点 的harris响应值 设矩阵H的特征值分别为 ,则: 像素点 的harris的响应值(response)为: 其中 (也可以为其他值),如果,则点 为预选harris角点 4)harris角点筛选 对步骤3中的预选harris角点执行非极大值抑制,得到最终的harris角点。 三:代码示例Harris角点检测算法的判别式角点检测算法的判别式,就是对这个情况的公式化表述。 当R大于某个阈值时就认为是角点。 以上的情况是根据观察得来的,并不需要harris论文中的论证过程。 harris算法通过某个矩阵M的行列式值和矩阵的迹对λ1λ2和λ1λ2进行了近似Harris算子步骤5如下: (1)利用水平、竖直相邻像素值之差求得Ix、Iy,进而求得M矩阵中4个元素的值。 (2)对M的4个元素进行高斯滤波,得到新的矩阵N。 (3)计算每个像素的角点响应值R,公式如下: 选取k为004。
24 harris角点检测的opencv接口与自己的c实现 见我的github 3 总结 由上面的描述我们知道了什么是角点,harris角点响应值的定义等,其实角点的定义都是相同的,只是不同的角点检测方法定义了不同的角点响应值的计算方式罢了。上述推导了最出名的harris响应值算法流程: 0)滤波、平滑,避免出现阶跃函数 1)计算图像水平和垂直方向的梯度 2)计算每个像素位置的Harris矩阵 3)计算每个像素位置的Harris角点响应值 3)非极大值抑制 4)找到Harris角点响应值大于给定阈值且局部最大的位置作为特征点1 画图解释图像卷积滤波的基本原理,并进一步简述常见的图像平滑滤波算法。 2 简述边缘检测的基本原理,以及Sobel、LoG和Canny算子的原理差异。 3 简述图像直方图的基本概念,及使用大津算法进行图像分割的基本原理。 4 简述Harris算子对角点的定义,进行角点检测的基本原理,并说明引入角点
Harris角点检测 为什么要用角点检测? 而边缘的出现恰好是灰度梯度变化程度大的时候。而在海森矩阵中,最大的特征值表示二维曲线最大的曲率和方向,同样最小的特征值表示二维曲线取消的曲率和方向。 得到了角点的坐标之后,根据响应值的大小进行 23响应值计算 : 上面计算不易于通过编程实现,Harris通过定义角点响应函数R的方式,用于表示一个角点的Harris响应值: trace表示为矩阵的迹,det为矩阵的行列式(矩阵的迹:主对角线上的值相加即所有特征值的和),k为经验常数,一般取004~006。当角点量小于阈值值,则不是候选角点。 14,Harris角点性质 141 阈值决定检测点数量 增大 alpha 的值,将减小角点响应值 R,降低角点检测的灵性,减少被检测角点的数量;减少 alpha 值,将增大角点响应值 R,增加角点检测的灵敏性,增加被检测角点的数量。
MATLAB中文论坛MATLAB 图像处理与计算机视觉板块发表的帖子:请教一个Harris角点检测的问题。function =Harris1(in_image,a)% 功能:检测图像的Harris角点% 输入:in_image-待检测的RGB图像数组% a-角点参数响应,取值范围为:004~006% 输出:posr-特征值一个较大,一个较小,窗口中含有边缘; 特征值都比较小,窗口处在平坦区域; 那么根据书上又提出了一个不用实际计算特征值的方法。也就是度量角点响应: 对每一个窗口计算得到一个分数R,根据R的大小来判定窗口内是否存在harris特征角。// 计算输出响应函数的值得矩阵 // ***** void harrisResponse (Mat_< float > &GaussXX, Mat_< float > &GaussYY, Mat_< float > &GaussXY, Mat_< float > &resultData, float k);
特征值分析: 四、HARRIS角点计算流程 对角点响应函数R进行阈值处理: R > threshold 提取R的局部极大值 PS:为了消除参数k的影响,也可采用商来计算响应: Harris 角点的描述子通常是由角点周围像素块的灰度值,以及用于比较的归一化互相关矩阵构成的。 cv2cornerHarris ()函数的返回值其实就是R值构成的灰度图像 灰度图像坐标会与原图像对应 R值就是角点分数 当R值很大的时候 就可以认为这个点是一个角点 OpenCV 中的 Harris 角点检测 Open 中的函数 cv2cornerHarris () 可以用来进行角点检测。 参数如 下 • img 数据类型 Harris角点检测的API: cornerHarris(Mat src, Mat dst, int blockSize, int ksize, double k) src:单通道的8位或者浮点数图像,用灰度图像; dst:输出的每个像素点的响应值,是CV_32F类型,大小与输入图像一致。blockSize:根据特征值与特征向量计算矩阵M的大小,常见取值为2。ksize Sobel:算子梯度计算,常见取值为3。
一、Harris角点检测基本理论 二、opencv代码实现 三、改进的Harris角点检测 四、FAST角点检测 五、参考文献 六、附录(资料和源码) 一、Harris角点检测基本理论(要讲清楚东西太多,附录提供文档详细说明) 11 简略表达:在 3\times3 或者 5\times5 大小的窗口邻域内进行非最大值抑制,局部最大值点即为图像中的角点。 性质 参数α对角点检测的影响:增大 \alpha 的值,将减小角点响应值 R ,减少被检测角点的数量;减小 \alpha 的值,将增大角点响应值 R ,增加被检测角点的数量。 Harris 角点检测算子对亮度和对比度的IySobel (img, dst, CV_64FC1, 1, 0, 3);
Harris角点检测来自于 Moravec检点检测(1977, Moravec ),并对它进行了改进和更强的数学建模。 Moravec角点检测用一个二值窗口在图像的某个像素点的所有方向上进行移动,并计算移动后和移动前像素强度变化的平均值,得到的最小的值定为该点的角点响应值。