基於FPGA的腐蝕膨脹演算法實現

本篇文章我要寫的是基於的腐蝕膨脹演算法實現,腐蝕膨脹是形態學圖像處理的基礎,,腐蝕在二值圖像的基礎上做「收縮」或「細化」操作,膨脹在二值圖像的基礎上做「加長」或「變粗」的操作。那麼什麼是二值圖像呢?把一幅圖片看做成一個二維的數組,那麼二值圖像是一個只有0和1的邏輯數組,我們前面Sobel邊緣檢測後的圖像輸出邊緣效果,設置個閾值,大於閾值輸出為1,小於閾值輸出為0,最後輸出就是一幅二維圖像了。

上一篇我是直接用MATLAB處理後的灰度圖片進行Sobel邊緣檢測的,在圖片的選取中難免會有雜訊的出現,所以為了使邊緣檢測的效果更加顯著,我們將圖像先進行中值濾波,然後再進行Sobel邊緣檢測,最終加上腐蝕膨脹演算法使圖像邊緣更加細膩並硬朗。

首先我們比較一下中值濾波前Sobel和中值濾波後Sobel兩種方法的顯示效果。

中值濾波前Sobel

中值濾波後Sobel

可以明顯的看出,中值濾波後Sobel的圖片邊緣更明顯,尤其是從lena頭髮和帽子部分的顯示效果來看,很多多餘的邊緣都被濾除掉,所以中值濾波後邊緣檢測,勢在必行。對於這部分的工程,我覺的應該沒什麼難度,中值濾波的代碼我已經給出,只需要在輸出時再加上Sobel就完事了。希望讀者能自己去做去調試搞定。

腐蝕演算法

腐蝕是一種消除邊界點,使邊界向內部收縮的過程。可以用來消除小且無意義的物體。用3X3的結構元素,掃描圖像的每一個像素,用結構元素與其覆蓋的二值圖像做「與」操作,如果都為1,結果圖像的該像素為1。否則為0。結果會使二值圖像小一圈。

擬採用形象的比喻來說明該運算,且用0表示蛀蟲,1表示大米。蛀蟲腐蝕大米的過程便是腐蝕運算,

腐蝕

如圖所示,對於一個像素矩陣而言,因為有蛀蟲(0)的存在,所以將8顆大米(1)腐蝕掉了,即使只存在一個蛀蟲(0),但是還是會被蛀蟲腐蝕完畢,最後一幅圖上面由於沒有蛀蟲(0),固然大米一顆不懶,保存完好。

關於演算法的實現,可以用下式子來表示,即3x3像素的運算:

P = P11 & P12 & P13 & P21 & P22 & P23 & P31 & P32 & P33

在HDL中,為了通過面積去換速度,我們將上式改變如下:

P1 = P11 & P12 & P13

P2 = P21 & P22 & P23

P3 = P31 & P32 & P33

P = P1 & P2 & P3

如圖所示,即通過2個時鐘/步驟的運算,便能實現腐蝕運算的結果

腐蝕模擬

膨脹演算法

膨脹是將與物體接觸的所有背景點合併到該物體中,使邊界向外部擴張的過程。可以用來填補物體中的空洞。用3X3的結構元素,掃描圖像的每一個像素,用結構元素與其覆蓋的二值圖像做「與」操作,如果都為0,結果圖像的該像素為0,。否則為1。結果:使二值圖像擴大一圈。

先腐蝕後膨脹的過程稱為開運算。用來消除小物體、在纖細點處分離物體、平滑較大物體的邊界的同時並不明顯的改變其面積。先膨脹後腐蝕的過程稱為比運算,用來填充物體內細小空間、連接鄰近物體、平滑其邊界的同時並不明顯改變其面積。

膨脹演算法用最簡單的比喻來描述:0表示害蟲,1表示青蛙,青蛙吃了害蟲表示膨脹運算,我們用3*3像素陣列來解釋:

圖膨脹

如圖所示,圖左只有害蟲(0),所以害蟲都好好活著,中間那個圖,雖然只有一個害蟲,但是還是免不了被青蛙吃掉的命運,最右邊的那幅圖,都是青蛙,所以青蛙始終是青蛙。

關於演算法的實現,可以用下式子來表示,即3x3像素的運算:

P = P11 || P12 || P13 || P21 || P22 || P23 || P31 || P32 || P33

在HDL中,為了通過面積去換速度,我們將上式改變如下:

                                   P1 = P11 || P12 || P13

P2 = P21 || P22 || P23

P3 = P31 || P32 || P33

P = P1 || P2 || P3

如圖所示,即通過2個時鐘/步驟的運算,便能實現腐蝕運算的結果

膨脹運算模擬

上面的模擬圖是我之前用Modelsim做的模擬,這裡就不重複用Isim模擬了。腐蝕膨脹用FPGA實現可以說是十分簡單的,將二值圖像生成3x3矩陣,最後通過如上式子計算,輸出即可。

腐蝕

膨脹

  從上面兩幅圖可以看出,腐蝕後的圖像邊緣明顯變細,消除了更多假邊緣,在腐蝕基礎上使用膨脹演算法的lena將腐蝕後的邊緣擴大、加粗,這樣看起來更清楚,最終為我們後續圖像識別,作出了更好的準備工作。至此,腐蝕膨脹演算法就寫完了,如果有什麼不足請您指點,有什麼問題大家可以留言一起討論,共同學習!

如果你想獲得本文的所有課件,請關注本人的個人微信訂閱號:開源FPGANingHeChuan或掃描下方二維碼關注訂閱號,在後台回復圖像處理,即可獲得本文的所有課件、資料以及更多FPGA的學習資料哦!


推薦閱讀:

從20秒塗鴉看文化屬性
老大讓我去面試(一)--從文本分類角度對於簡歷進行類別判斷
EBT:Proposal與Tracking不得不說的秘密
KCF公式推導錯誤及驗證
[171102] 圖像處理背景介紹

TAG:现场可编辑逻辑门阵列FPGA | 图像处理 |