opencv(5)形態學操作


圖像形態學一般用於閾值化后的二值圖像,其實也可以用於灰度圖像的處理,這篇文章主要對灰度中的應用做分析。

1.膨脹與腐蝕

函數

 

函數解釋可以參考:opencv論壇,關於里面的結構IplConvKernel可以參考:http://blog.csdn.net/babbxazzg/article/details/5976177

腐蝕操作要計算核區域內像素的最小值。膨脹操作要計算核區域內的像素最大值。具體的函數表達:

1

如果在二值圖像中進行表達,那么就是按核進行擴展,在二值圖像中,膨脹可以填充小的凹陷,鏈接一些相近的部件,腐蝕可以去除一些小的斑點。

2.IplConvKernel結構

結構

操作函數:

結構

以前做過一個點識別的程序,就是用這個實現的,代碼圖片如下:

形態學灰度操作實例

 

操作的圖片:
原圖 形態學操作后 閾值
                原圖                                       形態學操作后                          閾值

上面雖然不是一個很好的例子,但是在一定程度上說明形態學灰度的效果。

3. cvMorphologyEx

opencv中實現開運算、閉運算、形態梯度、tophat,baackhat的函數是cvMorphologyEx();具體使用方法:

cvMorphologyEx

 

有人說,這個函數使用非對稱結構的時候會造成偏移,其實即使使用opencv其他函數實現也會造成偏移,原理使其然,並不阻礙我們使用。

需要說明的是,最后一個參數,例如閉運算,iterations=2的時候,並不是說分別執行2次閉運算,也就是dilate—>erode-->dilate—>erode,實際的情況是dilate—>dilate-->erode—>erode。

(1)開運算,必運算

開運算是先腐蝕,再膨脹,用來消除小物體、在纖細點處分離物體、平滑較大物體的邊界的同時並不明顯改變其面積。

閉運算是先膨脹,在腐蝕,用來填充物體內細小空洞、連接鄰近物體、平滑其邊界的同時並不明顯改變其面積。

就用《learning opencv》上的圖說明吧:

3 4

                                      開運算                                                                                                    閉運算

 

下圖為例,演示通過開運算和閉運算消除噪聲,突出需要的物體,原圖以及經過二值化以后的圖像如下:

12 src

可以看到二值畫以后的圖像中,區域邊緣有很多毛刺,雖然濾波也可以消除,但是不是很干凈,想我采用的形態學操作辦法,代碼:

形態學操作例子

 

即先進性2次開運算,擴大邊緣的噪聲,在使用閉運算,連接邊緣的毛刺,開運算和閉運算的結果如下:

open   dst

經過開運算,閉運算后,邊緣平滑很多,這並不是一個很好的例子,手邊剛好有這么一張圖片,就一次來說明問題而已

 

剩下 的明天再說吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM