2012-03-04 11 views
2

私はキャニーエッジ検出器を実装しようとしています。私は非Maxima抑圧段階まで正しいと思われるものを生成するいくつかのコードを作ったが、私はそれを実行すると輪郭を表示するイメージを得るが、私の期待した結果ではない。Canny Edge Detector - 実装上の問題

私はそれを修正しようと時間を費やしましたが、どこが間違っているのかわかりません。誰かが私を正しい方向に向けることができますか?

% 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 
+0

を正確に問題は何ですか?何を期待していたのですか? – clabacchio

答えて

1

私はあなたがそこに持っている問題は、ビット単位であると思いORです:

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))