在matlab的影像處理工具箱中,有一系列關于Binary Images的處理函式,都是以字母bw開頭的,其中以bwmorph函式選項最為豐富,一共有'bothat'、'branchpoints'、'bridge'、'clean'、'close'等十幾個方法,其中像骨骼化、細化等常見的功能也集成在這個函式里,同常規的寫法一樣,這些演算法都是需要迭代的,因此,這個函式也有個迭代次數的引數,那么另外一些算子,比如clean、diag、remove等等其實都是基于3*3或者5*5領域的,而其中的'erode'、'open'也只是基于3*3的,因此和真正的常用的腐蝕和膨脹還有所不同,那個需要使用imopen或者imclose實作,實際上,這些基于3*3或者5*5的小算子,他們對于二值圖基本上就是用一次結果接沒有變換,幾迭代次數多了也沒有啥用,那幾個圖測驗下其中幾個算子的效果:

原圖 Remove模式

Fill模式 Clean模式
這些效果都比較平淡,其中Remove的效果和bwperim非常類似,就是提取二值圖的邊緣,Fill的作用就是填充影像中面積為1的黑色封閉區域,Clean是填充面積為1的白色封閉區域,他們不管你回圈迭代多少次,結果和回圈1次都是一樣的,因此,感覺作用有限,
另外,還有一個比較有意思的引數,即'majority’引數,matlab的幫助檔案對其解釋是:
Sets a pixel to 1 if five or more pixels in its 3-by-3 neighborhood are 1s; otherwise, it sets the pixel to 0.
即在3*3領域內,如果白色的像素多一點,即當前像素修改為白色,如果黑色的多一點,則修改為黑色,
這個引數呢,回圈迭代次數還有點作用了,下面是迭代一次和迭代十次后的效果比較:

迭代1次 迭代10次
可以看到,迭代十次后的結果影像的邊緣更為光滑,毛刺比較少,
對于這個選項,我覺得有點可擴展的空間,因為其他像Fill等選項,是個固定的Mask,而這個是有一定的自由度的,我們不一定非要限制他在3*3領域啊,任何領域應該都是可以的,只要取領域內統計像素多一點的作為結果,就可以了啊,甚至作為擴展,我們還不一定就正好取多一點的,我們取某個百分比的也是可以的嘛,這樣就可以有2個引數了,比如說取樣半徑和百分比,
不過,如果擴展到任意半徑,那么演算法的優化就很有必要了,不然原始的RAW實作,速度會慢的嚇人的,
這個優化其實也不是沒有弄過,但是二值圖有其特殊性,其資料只有2個情況,0和1或者說0和255,我們要統計其領域的Majority元素,沒有必要排序,也沒有必要統計0和1的獨立資料個數,想一想,我們是不是只要把領域的所有資料都加起來,然后也同樣的可以知道誰更多呢,比如說,半徑為5,那么領域一共有25個資料,如果加起來總和大于12,那不就意味著1多一些,如果小于等于12,那就意味著0多一些,
如何快速的實作領域的像素相加呢,這不就是Boxblur要干的事情嗎,Boxblur如何優化:積分圖、懶惰演算法等等一大堆資料可以利用的,
參考 : SSE影像演算法優化系列十三:超高速BoxBlur演算法的實作和優化(Opencv的速度的五倍)
13行代碼實作最快速最高效的積分影像演算法,
仔細想一想,這個和我們以前研究過的中值模糊不就是同一個演算法嗎,那里也有半徑和百分比一說,但是因為其特殊性,這里的不用使用傳統的中值模糊來實作演算法,速度得到了極大的提升,
這個演算法呢,我覺得一個比較有用的場合就是,對于一些初步處理后的二值圖,一般都有一些邊緣毛刺或者不平滑的位置,對于后續的識別可能有著較多的干擾,如果使用高斯模糊或者其他的抗鋸齒演算法呢,都會改變影像為二值的圖的屬性,就變為了灰度圖,這是不可以的,但是使用這個演算法呢,就完全不會改變二值圖的本質,同時又能平滑邊緣,
當然,有一點需要注意,當半徑較大時,這個演算法會改變原有二值圖的一些面積屬性,比如白色整體變少等等,這個呢,恰好我們有一個百分比引數,可同通過同時控制半徑和百分比來協調結果這個問題,比如對于上面的原始影像,其相關統計資訊如下:
總像素個數為:293828
白色的像素個數為:34191
連續塊:60個
影像的歐拉數為:59
當我們取半徑為4,百分比為50時,其效果如下所示:

半徑4,百分比50 半徑4,百分比45
相關統計資訊如下:
總像素個數為:293828
白色的像素個數為:32671
找到符合條件的連續塊:58個
影像的歐拉數為:58
可見白色像素的數量有所下降,如果把百分比修改為45,則統計資訊如下:
總像素個數為:293828
白色的像素個數為:34653
找到符合條件的連續塊:59個
影像的歐拉數為:59
和原始影像的資訊基本差不多了,但是很明顯結果比原始影像更有利于后續的分析,
本文Demo下載地址: https://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar,位于Binary->Processing->Majority,里面的所有演算法都是基于SSE實作的,
如果想時刻關注本人的最新文章,也可關注公眾號:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/500414.html
標籤:其他
