2017-08-28 108 views
0

我讀了https://en.wikipedia.org/wiki/Sobel_operator
說,我們要檢測灰度圖像中的水平邊緣。
請注意 - 我寫矩陣作爲行的序列。

問題1)然後我應該取[1,0,-1; 2,0,-2; 1,0,-1](來自G x =以上維基鏈接的矩陣* A)並且將其與給定圖像進行卷積。 所以我會疊加[-1,0,1; -2,0,2; -1,0,1](從矩陣的180度旋轉獲得)在每個像素上。
是嗎?

問題2)假設圖像是[a,b,c; d,X,f; g,h,i],那麼我將用-a + c-2d + 2f-g + i = Y來代替像素X.如果Y變成負值會怎麼樣? (像素值不能爲負)。

問題3)我可以通過應用sobel算子(不是將該輸出矩陣作爲圖像渲染)後得到的矩陣來得出關於圖像的特定像素的任何結論嗎?

問題4)是否 - 取決於使用的矩陣 - 水平或垂直邊緣將在輸出圖像中強調,但不是兩者都是?

謝謝。sobel操作員如何工作

回答

0

像素值不能爲負數

現在好了就可以了,根據定義。使用偏移表示法可以很容易地看到(平坦=灰色,負=暗,正=明),使用2的補碼錶示法通常會使數學更容易(但看起來真的很糟糕,如果直接渲染會造成混淆)。無論哪種方式,如果你想使用相同的格式(聽起來像你這樣做,否則就沒有問題),你還必須將結果夾緊和/或縮放到新的範圍,因爲在最糟糕的情況下,他們不會適合。自然圖像中的大多數像素不會有很大的衍生物,因此鉗位不會造成太大麻煩,但是否合適取決於您需要的信息。縮放會降低各處的小細節。

顯然,如果您使用不同的目標格式(每個像素的位數多於源數據),那麼首先這不是一個問題。如果你有一個8位輸入,你可以將結果以一個有符號的16位格式存儲,而不會有任何問題。

這是 - 根據使用的矩陣 - 水平或垂直邊緣將強調在輸出圖像,但不是兩個?

是的,但您可以通過獲取梯度向量的長度來合併它們。這將在任何方向(不僅H或V,而且對角線和兩者之間的角度)大致相等地處理邊緣。您也可以將水平和垂直導數的絕對值相加,這是一種更簡單的計算,但它將對角線邊緣視爲與直邊不同。

1

1)對。 2)標誌會告訴你邊緣的極性;如果你想保持兩個極性,取絕對值;否則只保留正面或負面部分。 3)邊緣是濾波器響應高的地方。 4)右邊,雖然一些斜邊也是可見的。