VitaBox AD

2014年6月5日 星期四

[Matlab]如何挑出圖像中隱藏的細節(1)? 自適應閥值挑選之迭代法(iteration method)


科技發達和資訊爆炸的時代帶來了快節奏的生活型態,不僅僅是人與人之間的溝通時間縮短了,閱讀報章雜誌也很難如祖父母時代一樣,戴著老花眼鏡慢慢地細嚼品嘗,往往以瀏覽或是匆匆一瞥的方式快速帶過,唯有夠吸睛和夠勁爆的圖像爭取到多幾秒的目光停留,挑戰傳統尺度並將重要的細節強調再強調,是這些圖像的共同之處。(OS: 蘋果日報如此受歡迎不是沒有原因的~~ )

換個角度來說,若能有效地強調圖像中被隱藏或不容易直接被觀察的重要細節,不止吸引目光,同時使閱讀者容易且快速地了解欲表達的重點。上左圖是一張COB光源的圖像,若有時間仔細看的話,可發現圖像中有一些長方型晶粒。若沒有時間看的話,可以直接看上右圖,其係利用二值化將長方晶粒強調出來,以進一步取得晶粒個數等等所需資訊,清楚明瞭。

二值化(Binary)是圖像處理的方法之一,藉由圖像直方圖的分佈來選定適當的灰階閥值(Threshold value) Tn,當灰階值大於Tn時,灰階值重新定義為255,當灰階值小於Tn時,灰階值重新定義為0,因此二值化後的圖片為黑白照片,僅有0(黑)和255(白)兩種灰階值,進而使得隱藏細節被強調出來。圖一說明當圖像直方圖出現明顯的波峰時,位於波谷的閥值將可區分出圖像中兩種不同灰階族群,是最佳選定閥值,如圖一綠色垂直線所示。

圖一
然而,當需要批量處理大量圖像時,手動調整閥值的工作就相對耗時,因此善用自適應演算法以選出最佳閥值是比較合適的作法,換言之,將上述提及的閥值選定準則程式化,交由計算機進行判斷和篩選。自適應挑選的演算法常用的有迭代法和大津法則(OTSU),其中迭代法定義初始閥值T0,係直方圖中的最多和最少像素的兩個灰階值之平均值,並計算由T0切割的兩個族群個別的平均灰階值之平均值T1,接著比較T1和T0的差距條件,若滿足條件,則T1為迭代法選定的最佳閥值。

圖二是利用matlab簡易實現迭代法的程式碼,其中為了避免直方圖中具有兩個以上等值的最大值或是最小值,因此初步加入最大值和最小值的挑選法則(即預設挑選第一個,若無法順利達到二值化的效果,可以自行修正),以確保該程式碼讀取不同圖像均可順利執行。另外,也加入前後閥值差距條件,若滿足條件,即跳出迴圈。本文首頁的Binary image即是利用該程式碼實現的結果。

圖二


圖三清楚地標示迭代法中的閥值選定過程,編號1~4分別表示第一次至第四次迴圈所挑選出來的閥值位置,當滿足差距條件後,閥值落在編號4的位置,最佳閥值為197。

圖三

另外,二值化圖像處理的手法常被應用於螢光標定的領域,利用二值化後的圖片並藉由圖像區域的面積計算,可協助判定螢光與被標定物之間的反應程度。圖四左圖是一張螢光標定的圖像,圖四右圖為利用上述程式碼測試後的結果,並由圖五可知,其最佳閥值為57,即編號4的位置,大約是兩個波峰之間的谷底平坦處,所以可有效地區分出圖像的前後景。

圖四

圖五

雖然上述經由迭代法所得到的結果還不錯,但由運算過程中明顯可知,迭代法仍受制於初始閥值的選定以及直方圖的分佈狀況,尤其是無明顯的峰值族群的直方圖分佈,其二值化效果就顯得不佳。

延伸閱讀:[Matlab]如何挑出圖像中隱藏的細節(2)? 自適應閥值挑選之大津法則(OTSU method)

沒有留言:

張貼留言