Harris响应的一点认识

本文深入解析Harris角点检测算法,介绍其通过计算像素差和利用高斯权重函数进行角点提取的原理。文章阐述了如何通过特征值判断角点、边线和平滑区域,并给出了k值选取范围及算法实现思路。

最近学习了一下关于Harris响应的相关知识,主要用于角点的提取上,它主要是利用一个滑动的窗口,对于某个固定方向的(u,v)(u,v)(u,v),我们可以得到在当前像素下的窗口进行移动所产生的像素差,公式如下:

w为窗口函数,代表了窗口下每个像素点的权重,一般采用高斯函数,表示越靠近所选点,其权值越大。

然后对于变化的像素点,我们为了加速,用泰勒展开

这样我们成功将差值转换为了xA^{T}x这样的二次型,然后对中间的A求它的特征值,如果两个特征值都很大,那么认为是角点,都很小,那么认为是平滑的区域,否则认为是边线

我们将其进一步转换得

k一般取0.04-0.06

这样如果R很大的正数认为是角点,很大的负数是边线,一般的正数是平滑区域。

至此,算法结束,可以看出Harris响应还是比较容易理解的,且代码实现不困难,因为偏导数就用差值来计算即可。

 

### Harris角点检测中的响应值概念 在Harris角点检测中,响应值用于衡量图像某一点是否可能是角点。具体来说,如果一个像素周围的小窗口内存在多个方向上的显著变化,则认为该位置是一个潜在的角点。 为了定量描述这种特性,定义了一个基于自相关矩阵$M$的响应函数$R$: $$ R = \det(M) - k(\text{trace}(M))^2 $$ 其中$\det(M)$表示矩阵$M$的行列式,$\text{trace}(M)$代表其迹运算,参数$k$为经验常数(一般取0.04至0.06之间),这有助于调整不同尺度下的响应强度[^1]。 ### 自相关矩阵构建方式 考虑一个小邻域内的灰度变化情况,假设移动$(u,v)$后的新位置处的亮度差可近似表达为二次形式: $$ E(u,v)=\sum_{x,y}w(x,y)\left[I(x+u,y+v)-I(x,y)\right]^2 $$ 这里$I(x,y)$指原始图像上各点的灰度值;权重系数$w(x,y)$通常采用高斯分布来加权平均周围的贡献程度。进一步简化得到线性化模型: $$ E(u,v)\approx[\begin{matrix} u & v \\ \end{matrix}] \begin{bmatrix} I_x^2 & I_xI_y\\ I_xI_y& I_y^2 \end{bmatrix} \begin{bmatrix} u \\v \end{bmatrix}=A[u,v]^T+B[u,v]+C $$ 最终形成如下结构的二阶矩阵$M=\langle A\rangle-\langle B\rangle+\langle C\rangle$作为核心计算单元[^2]。 ```python import cv2 import numpy as np def compute_harris_response(img, k=0.04): gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY).astype(np.float32) # Compute derivatives using Sobel operator dx = cv2.Sobel(gray,-1,1,0,ksize=3) dy = cv2.Sobel(gray,-1,0,1,ksize=3) # Calculate elements of the structure tensor M Ixx = dx * dx Ixy = dx * dy Iyy = dy * dy # Apply Gaussian blur to smooth out noise and get local averages sigma = 1.5 size = int(2*np.ceil(3*sigma)+1) Sxx = cv2.GaussianBlur(Ixx,(size,size),sigma) Sxy = cv2.GaussianBlur(Ixy,(size,size),sigma) Syy = cv2.GaussianBlur(Iyy,(size,size),sigma) det_M = (Sxx*Syy)-(Sxy**2) trace_M = Sxx+Syy response = det_M-k*(trace_M**2) return response ``` 上述代码实现了完整的Harris角点响应值计算流程,包括导数估计、结构张量构造及其后续处理步骤[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值