2014-06-14 236 views
0

我想了解非最大抑制(Canny邊緣檢測)的概念,所以我開始看着matlab代碼。下面顯示了確定邊緣方向的部分matlab代碼。Canny邊緣檢測的梯度方向

switch direction 
    case 1 
     idx = find((iy<=0 & ix>-iy) | (iy>=0 & ix<-iy)); 
    case 2 
     idx = find((ix>0 & -iy>=ix) | (ix<0 & -iy<=ix)); 
    case 3 
     idx = find((ix<=0 & ix>iy) | (ix>=0 & ix<iy)); 
    case 4 
     idx = find((iy<0 & ix<=iy) | (iy>0 & ix>=iy)); 
end 

這裏,

  • IX:通過高斯的衍生物沿X濾波後的輸入圖像
  • IY:通過高斯的衍生物沿着ý濾波後的輸入圖像
  • 殼體1:0-45degrees或181-225度
  • 情況2:46-90度或226-270度
  • 情況3:91-135度或271-315度
  • 殼體4:136-180degrees或316-360degree

如何是開關箱子內的條件對應於所述代碼下面的情況進行說明。任何人都可以解釋這一點。 ?

+1

也看看這個答案:http:// stackoverflow。com/a/13840446/461597 – Unapiedra

回答

1

乍一看,find((iy<=0 & ix>-iy) | (iy>=0 & ix<-iy));返回其中

  • (iy<=0 & ix>-iy),所以
    • 在y衍生物小於零的所有像素的索引,所以邊緣是向下,90°和270°
    • 之間
    • x導數大於零,所以邊緣向左,在180°和360°之間
    • ix的大小大於iy,所以邊緣主要是垂直傾斜的,而不是水平的
    • 導致的邊緣180°和225
    °之間
  • (iy>=0 & ix<-iy)),所以
    • 在y衍生物是大於零,所以邊緣向上,270°和90°之間
    • x導數小於零,因此邊緣向右,介於0°和180°之間,ix的大小大於iy,所以邊緣垂直傾斜
    • 導致0°和45°之間的邊緣°

假設像素被排序從上向下和自左向右,並在完全垂直邊緣(黑在左邊,白色右側)被定義爲0°

交換機的其他三個條款是類似的。

這與非最大抑制沒有直接關係。我假設這是Canny邊緣濾波器或類似的東西的一部分,在這種情況下,下一步將是在剛確定的邊緣方向上找到局部最大值。這是通過比較每個像素與其邊緣方向上的本地鄰居,並擦除除最大值之外的所有值。

+0

感謝您回覆Mr.HugoRune。它幫助我理解了邊描述符知識的概念。非常感謝您:) – Nrupatunga

+0

歡迎您:)如果此答案解決您的問題,請點擊投票按鈕下方勾選的複選標記將其標記爲已接受。 – HugoRune