我正在实施哈里斯角落探测器的教育目的,但我卡在哈里斯响应部分。基本上,我在做什么,是:实施哈里斯角落探测器
- 计算在x方向和y方向的图像强度梯度 (1)以上的(2)
- 输出
- 计算哈里斯响应的
- 模糊输出在3x3邻域中抑制(3)的输出中的非极大值,并且阈值输出
1和2似乎工作正常;然而,作为哈里斯响应,我得到的值非常小,没有一点达到阈值。输入是标准的户外摄影。
[...]
[Ix, Iy] = intensityGradients(img);
g = fspecial('gaussian');
Ix = imfilter(Ix, g);
Iy = imfilter(Iy, g);
H = harrisResponse(Ix, Iy);
[...]
function K = harrisResponse(Ix, Iy)
max = 0;
[sy, sx] = size(Ix);
K = zeros(sy, sx);
for i = 1:sx,
for j = 1:sy,
H = [Ix(j,i) * Ix(j,i), Ix(j,i) * Iy(j,i)
Ix(j,i) * Iy(j,i), Iy(j,i) * Iy(j,i)];
K(j,i) = det(H)/trace(H);
if K(j,i) > max,
max = K(j,i);
end
end
end
max
end
对于样品图片,最大结束是6.4163e-018这似乎太低了。
我已经恢复到不再过滤Ix2等,因此在stackoverflow的副本中留下了一些错误。 – Etan 2010-10-05 12:50:44
问题是我没有总结3x3方块中的所有像素来找出Ix2等;相反,我刚刚使用了相应的像素。在改变H之后,它总结了所有9个像素的所有Ix2,Ixy和Iy2,看起来非常好。 – Etan 2010-10-05 12:52:16
det(H)/ trace(H)是一种在没有lambda的情况下使用的近似值。 – Etan 2010-10-05 12:52:41