2008年12月11日星期四

[研究]特徵值計算01-Local binary pattern(LBP) histogram

Share/Bookmark


最近沒時間寫新文章,只好把舊的存檔哪出來充數,有些文章之前寫了一點,就被丟到倉庫了,現在正好可以清倉拍賣:P


這是前陣子做實驗的時候寫的一個計算LBP histogram的的小程式,這個LBP特徵又被稱為Uniform LBP,因為它沒有Weight的概念,又或者可以說它的Weight都是1。以下簡單說明Uniform LBP的算法:


LBP是一種用來描述區域紋理變化的特徵計算方式。其計算速度非常的快,相當適合使用在真實的即時系統之中。而缺點則是在平滑影像上的效果差強人意(例如:天空或飾海洋),因為平滑影像的灰階值太過相近。最近幾年,LBP演算法在人臉辨識的領域也相當受到關注


以下用3X3大小的區塊說明LBP histogram的計算方式。
image
第一步我們要先將周圍的灰階與中心點相減之後做二值化(Threholding)。像這樣:
55-43=+12>0 則二值化後,其值=1
35-43=-08<0 則二值化後,其值=0
28-43=-15<0 則二值化後,其值=0
52-43=+09>0 則二值化後,其值=1



所以我們可以得這樣的結果。

image


接下來,我們要依照2的次方排列相關位置的權重。由左到右,由上到下分別是 2的0次方=1、2的1次方=2、2的2次方=4、2的3次方=8,以此類推。因此會形成下面的權重方塊
image



將權重方塊和我們在第一步得到的結果相乘以後再相加,像這樣:
1X1+0X2+1X4+1X8+0X16+0X32+1X64+1X128=205
就是這3X3區塊的LBP值。



對整張圖片做迭代(iterative)就可以統計出這張圖片的LBP histogram。 也就是一張圖有三個區塊,算出的LBP值分別是205 20 205,那LBP histogram就是一個256大小的陣列lbpArray。 其中205的位置lbpArray[20]=1、lbpArray[205]=2,其他部分都是0的稀疏矩陣。



以上方法是計算整張圖片的LBP直方圖(Uniform LBP )



我用BCB寫了一個小程式,用來計算所選資料夾下所有圖片的LBP histogram並將這些存到記事本中,大家可以參考看看,裡面的一些程式是擷取自芬蘭奧魯大學的教授所開發的C++ Library

軟體訊息
名 稱:Uniform LBP計算工具

下載點:下載



4 意見: |

張貼意見

I don't wanna be a puppet 2008年12月24日下午1:41 提到...

這方法還有一個rotation invariance版本

稱LBP riu2上標 p,r下標

這紋理特徵我也有運用在我的碩論中...

提供您這訊息 希望對您有幫助

Alan

finalevil 2009年1月3日下午9:59 提到...

謝謝你的訊息:)

儒泓 2009年12月15日上午12:20 提到...

請問一下,一定要安裝cbc才能跑這個程式嗎?
我把他下載了然後載入VC.NET
但卻run出這樣的錯誤信息
error C2001: 常數中包含新行字元
fatal error C1083: 無法開啟包含檔案: 'vcl.h': No such file or directory

請大大幫我解惑,謝謝!

finalevil 2009年12月16日下午5:51 提到...

@儒泓
由於這個程式是用BCB寫的,所以在VC是沒辦法編譯的喔!
建議用文字編輯器打開程式直接參考。

 
Creative Commons License
本 著作 係採用 創用 CC 姓名標示-非商業性-相同方式分享 2.5 台灣 授權條款授權.