Реализация углового детектора Харриса

Я использую угловой детектор Харриса в образовательных целях, но застрял на части ответа Харриса. В основном, что я делаю, это:

  1. Вычислить градиенты интенсивности изображения в направлении x и y
  2. Результат размытия (1)
  3. Вычислить реакцию Харриса на выходе из (2)
  4. Подавить не- максимумы на выходе (3) в 3x3-окрестности и пороговые выходные

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, что кажется слишком низким.

11
задан user1803551 16 February 2016 в 22:50
поделиться