Я использую детектор угла Гарриса для образовательных целей, но я застрял в части ответа Харриса. В основном, что я делаю, это:Реализация углового детектора Harris
- Compute градиентов интенсивности изображения в x- и у-направлении
- Размытия выхода (1)
- Вычислительного Harris ответа по выходу (2)
- Подавлять не-максимы в выводе (3) в 3х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
Для образца изображения max достигает 6.4163e-018, который кажется слишком низким.
Я вернулся, чтобы не фильтровать Ix2 и т. Д., Поэтому в копии на stackoverflow осталась некоторая ошибка. – Etan
Проблема заключалась в том, что я не суммировал все пиксели в квадрате 3x3, чтобы узнать Ix2 и т. Д .; вместо этого я просто использовал соответствующий пиксель. После изменения H таким образом, что он суммирует все Ix2, Ixy и Iy2 для всех 9 пикселей, он выглядит очень красиво. – Etan
det (H)/trace (H) является часто используемым приближением в случае, когда у вас не будет лямбда. – Etan