哈里斯和斯蒂芬斯角点检测算法:行列式始终为0(零)。

7
作为本科论文的一部分,我正在尝试使用Harris和Stephens算法实现拐角检测器: A combined Corner and Edge Detector 我进行了以下计算:
1. 使用Sobel滤波器(3x3)计算x和y偏差 2. 计算系统矩阵M
M = [A C; C B]
如果我对以下内容都正确:
- A = Sobel_x平方响应:Ix * Ix(在某个像素处) - B = Sobel_y平方响应:Iy * Iy(在某个像素处) - C = Sobel_x响应乘以Sobel_y响应:Ix * Iy(在某个像素处) 3. 现在我计算M的迹和我特别关心的行列式。
在他们的论文中,他们建议使用以下近似值来计算行列式,因为它避免了计算特征值的昂贵计算:
det(M) = A * B - C^2
这一定会以零结束!
表达式det(M) = A * B - C^2可以重写为:(使用点2的知识)
det(M) = A * B - C * C
det(M) = Ix*Ix * Iy*Iy - Ix*Iy * Ix*Iy
det(M) = Ix*Ix * Iy*Iy - Ix*Ix * Iy*Iy
det(M) = 0
那么我干嘛要费力计算行列式呢? 就我所见,仅计算迹已足够! (或者我在哪里犯了严重错误?)

你是不是想说矩阵M = [A C;C B]?否则我不知道B指的是什么。 - hardmath
3个回答

5
在计算R值之前,需要在Ix2、Iy2、Ixy上应用高斯核。

1
进一步解释一下:似乎矩阵“M”实际上应该包括像素周围窗口的梯度项之和。因此,行列式项不应该抵消。请参见此其他帖子以获取更多上下文信息:http://stackoverflow.com/questions/16803587/how-to-compute-the-structure-tensor-of-a-2d-array - Patrick Finnigan

0

是的,有点混淆。让我试着让它更清晰一些。

正如一些评论中所述,Ix²和Iy²的结果来自于在像素位置周围的一个补丁中对所有元素求和。例如,如果我们取一个2×2的补丁(其中下标0-3是补丁中的4个“单元格”),对于1个像素,我们有:

这意味着Ix²Iy²≠(IxIy)²,即:

enter image description here


-1

我遇到了同样的问题。对于图像中的每个像素,您希望考虑一个小窗口,比如3x3,围绕该像素。

对于该3x3窗口中的每个像素,您将应用高斯掩模来构建2x2矩阵H'的Ix ^ 2,Ix * Iy和Iy ^ 2。然后,您将总结H'矩阵以获得最终的H矩阵,并从那里计算行列式。

但我不清楚的是为什么需要应用高斯掩模,因为许多幻灯片和在线资源都没有提到它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接