2017-05-23 115 views
0

我想實現圖像過濾內核到圖像,其中我使用過濾矩陣來過濾圖像。但是,我不太瞭解邊界像素是如何處理的。我認爲任何濾鏡像素超出圖像範圍都會反射到各自的邊緣。任何人都可以更清楚地爲我解釋這個嗎?C++圖像內核環繞卷積

謝謝!

回答

0

沒有答案。你可以反射邊界像素,通常這是最好的選擇,或者你可以包裹,如果圖像是圓環狀的,這更容易,有時也是正確的。或者你可以用灰色填充。但是無論你做什麼,你都會獲得優勢。

一般來說,添加填充像素最容易,而不是試圖在卷積代碼本身中保護邊緣。

0

那麼,有很多方法可以處理圖像中的邊界像素。一個常見的方法是用額外的行和列填充圖像矩陣,以便爲這些邊界像素(在內核卷積操作中需要的鄰居)提供鄰居。

例如,你有這樣的N×N的圖像矩陣:

a[0][0] a[0][1] ... a[0][n-1] 
a[1][0] a[1][1] ... a[1][n-1] 
    .   .    . 
    .   .    . 
    .   .    . 
a[n-1][0] a[n-1][1] ... a[n-1][n-1] 

你應該把第n行下面第一行和第一線之上的第n行填充它。此外,第一列在最後一列和最後一列之前被複制。

a[n-1][n-1] a[n-1][0] a[n-1][1] ... a[n-1][n-1] a[n-1][0] 

a[0][n-1]  a[0][0] a[0][1] ... a[0][n-1]  a[0][0] 
a[1][n-1]  a[1][0] a[1][1] ... a[1][n-1]  a[1][0] 
    .    .   .    .    . 
    .    .   .    .    . 
    .    .   .    .    . 
a[n-1][n-1] a[n-1][0] a[n-1][1] ... a[n-1][n-1] a[n-1][0] 

a[0][n-1]  a[0][0] a[0][1] ... a[0][n-1]  a[0][0] 

正如你所看到的,角落以對稱的方式反映出來。新邊框的左上角採用初始矩陣中右下角元素的值。

你最終得到一個應用內核卷積運算的(n + 2)x(n + 2)矩陣。