神經網路之卷積篇:詳解更多邊緣檢測內容(More edge detection)

Oten發表於2024-08-08

詳解更多邊緣檢測內容

已經見識到用卷積運算實現垂直邊緣檢測,在本部落格中,將看到如何區分正邊和負邊,這實際就是由亮到暗與由暗到亮的區別,也就是邊緣的過渡。還能瞭解到其他型別的邊緣檢測以及如何去實現這些演算法,而不要總想著去自己編寫一個邊緣檢測程式。

這張6×6的圖片,左邊較亮,而右邊較暗,將它與垂直邊緣檢測濾波器進行卷積,檢測結果就顯示在了右邊這幅圖的中間部分。

現在這幅圖有什麼變化呢?它的顏色被翻轉了,變成了左邊比較暗,而右邊比較亮。現在亮度為10的點跑到了右邊,為0的點則跑到了左邊。如果用它與相同的過濾器進行卷積,最後得到的圖中間會是-30,而不是30。如果將矩陣轉換為圖片,就會是該矩陣下面圖片的樣子。現在中間的過渡部分被翻轉了,之前的30翻轉成了-30,表明是由暗向亮過渡,而不是由亮向暗過渡。

如果不在乎這兩者的區別,可以取出矩陣的絕對值。但這個特定的過濾器確實可以為區分這兩種明暗變化的區別。

再來看看更多的邊緣檢測的例子,已經見過這個3×3的過濾器,它可以檢測出垂直的邊緣。所以,看到右邊這個過濾器,想應該猜出來了,它能讓檢測出水平的邊緣。提醒一下,一個垂直邊緣過濾器是一個3×3的區域,它的左邊相對較亮,而右邊相對較暗。相似的,右邊這個水平邊緣過濾器也是一個3×3的區域,它的上邊相對較亮,而下方相對較暗。

這裡還有個更復雜的例子,左上方和右下方都是亮度為10的點。如果將它繪成圖片,右上角是比較暗的地方,這邊都是亮度為0的點,把這些比較暗的區域都加上陰影。而左上方和右下方都會相對較亮。如果用這幅圖與水平邊緣過濾器卷積,就會得到右邊這個矩陣。

再舉個例子,這裡的30(右邊矩陣中綠色方框標記元素)代表了左邊這塊3×3的區域(左邊矩陣綠色方框標記部分),這塊區域確實是上邊比較亮,而下邊比較暗的,所以它在這裡發現了一條正邊緣。而這裡的-30(右邊矩陣中紫色方框標記元素)又代表了左邊另一塊區域(左邊矩陣紫色方框標記部分),這塊區域確實是底部比較亮,而上邊則比較暗,所以在這裡它是一條負邊。

再次強調,現在所使用的都是相對很小的圖片,僅有6×6。但這些中間的數值,比如說這個10(右邊矩陣中黃色方框標記元素)代表的是左邊這塊區域(左邊6×6矩陣中黃色方框標記的部分)。這塊區域左邊兩列是正邊,右邊一列是負邊,正邊和負邊的值加在一起得到了一箇中間值。但假如這個一個非常大的1000×1000的類似這樣棋盤風格的大圖,就不會出現這些亮度為10的過渡帶了,因為圖片尺寸很大,這些中間值就會變得非常小。

總而言之,透過使用不同的過濾器,可以找出垂直的或是水平的邊緣。但事實上,對於這個3×3的過濾器來說,使用了其中的一種數字組合。

但在歷史上,在計算機視覺的文獻中,曾公平地爭論過怎樣的數字組合才是最好的,所以還可以使用這種:\(\begin{bmatrix}1 & 0 & - 1 \\ 2 & 0 & - 2 \\ 1 & 0 & - 1 \\\end{bmatrix}\),叫做Sobel的過濾器,它的優點在於增加了中間一行元素的權重,這使得結果的魯棒性會更高一些。

但計算機視覺的研究者們也會經常使用其他的數字組合,比如這種:\(\begin{bmatrix} 3& 0 & - 3 \\ 10 & 0 & - 10 \\ 3 & 0 & - 3 \\\end{bmatrix}\),這叫做Scharr過濾器,它有著和之前完全不同的特性,實際上也是一種垂直邊緣檢測,如果將其翻轉90度,就能得到對應水平邊緣檢測。

隨著深度學習的發展,學習的其中一件事就是當真正想去檢測出複雜影像的邊緣,不一定要去使用那些研究者們所選擇的這九個數字,但可以從中獲益匪淺。把這矩陣中的9個數字當成9個引數,並且在之後可以學習使用反向傳播演算法,其目標就是去理解這9個引數。

當得到左邊這個6×6的圖片,將其與這個3×3的過濾器進行卷積,將會得到一個出色的邊緣檢測。把這9個數字當成引數的過濾器,透過反向傳播,可以學習這種\(\begin{bmatrix}1 & 0 & - 1 \\ 1 & 0 & - 1 \\ 1 & 0 & - 1 \\\end{bmatrix}\)的過濾器,或者Sobel過濾器和Scharr過濾器。還有另一種過濾器,這種過濾器對於資料的捕捉能力甚至可以勝過任何之前這些手寫的過濾器。相比這種單純的垂直邊緣和水平邊緣,它可以檢測出45°或70°或73°,甚至是任何角度的邊緣。所以將矩陣的所有數字都設定為引數,透過資料反饋,讓神經網路自動去學習它們,會發現神經網路可以學習一些低階的特徵,例如這些邊緣的特徵。儘管比起那些研究者們,要更費勁一些,但確實可以動手寫出這些東西。不過構成這些計算的基礎依然是卷積運算,使得反向傳播演算法能夠讓神經網路學習任何它所需要的3×3的過濾器,並在整幅圖片上去應用它。這裡,這裡,還有這裡(左邊矩陣藍色方框標記部分),去輸出這些,任何它所檢測到的特徵,不管是垂直的邊緣,水平的邊緣,還有其他奇怪角度的邊緣,甚至是其它的連名字都沒有的過濾器。

所以這種將這9個數字當成引數的思想,已經成為計算機視覺中最為有效的思想之一。

相關文章