我正在實施哈里斯角落探測器的教育目的,但我卡在哈里斯響應部分。基本上,我在做什麼,是:實施哈里斯角落探測器
- 計算在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