2012-12-01 40 views
4

我們已經瞭解到,您可以使用與邊緣正交的方向atan(dy/dx)獲得梯度方向。 現在我們做了一個家庭作業,我們應該把這個方向分解成四個類(x和y方向和兩個對角線),然後檢查兩個像素鄰居在最佳匹配方向非最大抑制非最大抑制

雖然我沒有完全獲得解決方案。顯然,我們四種情況:

  1. abs(angle) < pi/8,所以梯度(粗略地)在x方向上的點,因此,我們檢查img(i, j-1)img(i, j+1)(假設圖像原點是在左上角)

  2. angle > pi/8 && angle <= 3*pi/8 ,所以梯度指向右上角。現在我想我們需要檢查img(i-1, j+1)img(i+1, j-1),但是我們檢查img(i-1, j-1)img(i+1, j+1),這看起來像是正交對角線。

其他兩種情況是等價的。我試圖改變這一點,但邊緣真的看起來很奇怪,所以這似乎是正確的,但我不明白爲什麼。

有人可以向我解釋這個嗎?

+0

非最大抑制是一種消除不在重要邊緣的點的方法。在第一種情況下,如果在給定點處梯度接近零度,則表示邊緣向北或向南,並且如果此點的大小大於此點,則該點將被視爲在邊緣上兩個點的左右兩側的大小(如你的例子)。在第二種情況下,您正在檢查梯度爲45度,因此邊緣位於135度,因此如果沿梯度方向的點(即(-1,-1)和(1, 1)。 – mmgp

+0

是的,它是沿着梯度方向又名。 45°aka。到右上角。我不確定你使用的座標系。(-1,-1)和(1,1)看起來像一個經典的笛卡爾系統,它的oritin在左下角。我們在matlab中這樣做了,所以圖像原點位於左上角,因此看起來像我們檢查邊緣方向aka。 135°aka。到左上角。 – user1709708

+0

這顯然是我用過的同一個座標系,因爲我說梯度在45度和(-1,-1),(1,1)沿着這個梯度。這在笛卡爾平面中原來是一樣的,它與這種情況下的原點位置無關。我以前的回答是,你用它的併發症是什麼?它是否與(-1,-1)被假定高於你的原點相關? – mmgp

回答

13

非最大抑制是一種消除不在重要邊緣的點的方法。在第一種情況下,如果在給定點處梯度接近零度,則表示邊緣向北或向南,並且如果此點的大小大於此點,則該點將被視爲在邊緣上兩個點的左右兩側的大小(如你的例子)。在第二種情況下,您正在檢查梯度爲45度,因此邊緣位於135度,所以如果它大於沿着梯度方向的點(即(-1,-1)和(1) ,1)。旋轉座標系不會影響這一點。

enter image description here

+0

我對你的解釋有點混淆。根據上圖,您已經顯示了情況2的數字(梯度角= 45度)。但是,對於梯度= 22.5度,根據您的圖紙,我們必須檢查頂部和底部的點(-1,0)和(1,0)。我對麼?? – Nrupatunga

+0

@mmgp請你檢查我的代碼,我使用c#/ Emgu實現它,但我找不到原始圖像漸變和其抑制形式之間的任何區別。這裏是我的代碼https://ideone.com/WF7xzL。如果您有任何問題,代碼將完整記錄 –

0

下面是Canny邊緣檢測過程中使用Python實現的Non Maxima Suppression

他們專注於南北,東北和西南,東西,東南和西北。然後決定保留哪些值。

希望它能幫助需要NMS的人找到更好的優勢。