Canny Edge Detector - проблема в реализации - PullRequest
2 голосов
/ 04 марта 2012

Я пытаюсь реализовать детектор краев Canny.Я сделал некоторый код, который генерирует то, что, по моему мнению, должно быть правильным до стадии подавления не максимума, однако, когда я запускаю его, я получаю изображение, которое примерно показывает контуры, но не является моим ожидаемым результатом.

Я часами пытался это исправить, но не могу найти, где я ошибся.Кто-нибудь может указать мне правильное направление?

% Set direction to either 0, 45, -45 or 90 depending on angle.
[x,y]=size(f1);
for i=1:x-1,
    for j=1:y-1,
        if ((gradAngle(i,j)>67.5 && gradAngle(i,j)<=90) || (gradAngle(i,j)>=-90 && gradAngle(i,j)<=-67.5)) 
            gradDirection(i,j)=0;
        elseif ((gradAngle(i,j)>22.5 && gradAngle(i,j)<=67.5))
            gradDirection(i,j)=45;
        elseif ((gradAngle(i,j)>-22.5 && gradAngle(i,j)<=22.5))
            gradDirection(i,j)=90;
        elseif ((gradAngle(i,j)>-67.5 && gradAngle(i,j)<=-22.5))
            gradDirection(i,j)=-45;
        end
    end
end

% Non-maxima suppression. 
% Compare to neighbours and set as 0 if smaller than either of them
for i=2:x-2,
    for j=2:y-2,
        if(gradDirection(i,j)==90)
           if (gradDirection(i,j)<(gradDirection(i,j-1) | gradDirection(i,j+1)))
               gradDirection(i,j)=0;
           end 
        end
        if(gradDirection(i,j)==45)
           if (gradDirection(i,j)<(gradDirection(i+1,j-1) | gradDirection(i-1,j+1)))
               gradDirection(i,j)=0;
           end 
        end
        if(gradDirection(i,j)==-45)
           if (gradDirection(i,j)<(gradDirection(i-1,j-1) | gradDirection(i+1,j+1)))
               gradDirection(i,j)=0;
           end 
        end
    end
end

1 Ответ

1 голос
/ 05 марта 2012

Я думаю, что проблема с побитовым ИЛИ у вас там:

 if (gradDirection(i,j)<(gradDirection(i,j-1) | gradDirection(i,j+1)))

Я думаю, это должно быть что-то вроде:

 if (gradDirection(i,j)<gradDirection(i,j-1) || gradDirection(i,j)<gradDirection(i,j+1))
...