lbp是一種簡單,有效的紋理分類的特徵提取演算法。主要的**是"multiresolution gray-scale androtation invariant texture classification with local binarypatterns", pami, vol 24, no.7, july 2002。lbp就是"local binarypattern"的縮寫。
從紋理分類的角度看,影象上某個畫素點的紋理特徵,大多數情況下,是指這個點和它周圍點的關係。也就是說,這個點和它的鄰域內的點的關係。從哪個角度對這種關係提取特徵,就形成了不同種類的特徵。有了特徵,就能根據特徵對紋理進行分類。lbp構造了一種衡量乙個畫素點和它周圍畫素點的關係。
從原來上來說,它的步驟是這樣的:
公式(1) t=t(g_c, g_0, ..., g_(p-1))
這個是latex的寫法,跟**上的公式(1)是一樣的,用過latex的都知道:)
假設影象是灰度圖,那麼,影象上的畫素值在[0, 255]的區間內。假設我們要計算某個點(x_0,y_0)的lbp特徵,g_c就是畫素(x_0, y_0)的灰度值,g_0, g_1, ..., g_(p-1)就是(x_0,y_0)周圍的若干個畫素的灰度值。這些點是符合分布的呢?按照**的圖1,是分布成圓形,以p等分這個圓。
如果影象亮度發生變化,比如說,在很亮的情況拍照的紋理,和很暗的情況拍照的紋理,儘管紋理相似,亮度不同。我們需要灰度不變的特徵,也就說,要讓計算出的特徵值,在亮或暗拍照的情況下是一樣的。那麼,公式(1)可以改造成公式(2):
t = t( g_c, g_0-g_c, g_1 - g_c,..., g_(p-1) - g_c)
這個公式和公式(1)是等價的,毫無疑問。進一步的,g_c其實僅表示拍照時候的亮度,我們也可以把它簡化掉,這樣公式(2)可以改造成公式(3):
t = t(g_0 - g_c, g_1-g_c,..., g_(p-1) - g_c)
考慮到實際效能,公式(3)還可以進一步改寫成只有0和1的特徵,公式(5):
t =
t(s(g_0 - g_c), s(g_1-g_c),..., s(g_(p-1)- g_c))
如果x > = 0, s(x) = 1, 其他情況,s(x) =0。這樣,t就只剩下0和1了,這也就是lbp的binary的由來。如果t是一串0和1組成的特徵,那麼它就可以表示成乙個整數,這個0和1組成的串,就是整數的二進位製碼。於是,我們得到了公式(7):
lbp_(p, r) = sum_(p=0)^(p-1)s(g_p-g_c)*2^p
也就是說,不同的p和不同的r,根據t的二進位制串,就能算出乙個整數值。
如果影象旋轉了,那麼,紋理特徵就旋轉了,此時,得到的二進位制串也就是是旋轉了,得到的lbp的值就變化了。為了讓lbp特徵是旋轉不變的,演算法需要進一步改造。假設,我們在公式(5)中得到的二進位制特徵是:
10010000,那麼,將這個二進位制特徵,按照順時針方向旋轉,可以把它轉成00001001的形式,這樣得到的lbp的值是最小的。無論影象怎麼旋轉,對點提取的二進位制特徵點的最小值是不變的。按照這種思路,就得到了公式(8):
lbp_(p, r)^(ri) = min
這樣,lbp特徵是旋轉不變的了。當p=8的時候,能產生的不同的二進位制特徵數量是2^8個,經過上述處理之後,只有36個旋轉不變特徵。
作者認為經過上述步驟得到的lbp特徵的區分性不夠好。為了,將上述的36個最小二進位制特徵,在進一步分類,在這36個特徵裡,9個uniform特徵出現的頻率特別高,有時候會到90%。因此,將上述的特徵再改造成公式(9):
lbp_(p, r)^(riu2) = sum_(p=0)^(p-1)s(g_p-g_c)
if u(lbp_(p, r)) <=2
lbp_(p, r)^(riu2) = p + 1
if u(lbp_(p, r))>2
函式u(x)的含義是:如果位置i和位置i-1是不同的,那麼就是u值就是1,如果相同,u就是0,對於所有的i,都這麼處理,就得到了u(x)。比如說, x =000000,那麼u(x) = 0; x = 10000000,那麼u(x) = 1; x = 01000000,那麼u(x) =1。一次類推。只有u(x) <= 2的pattern才是uniform pattern。
最終的紋理特徵,就是lbp數的直方圖。舉例來說,假設有一副圖a.jpg,不考慮邊緣,有效的解析度100*200。那麼,要計算它的lbp特徵,選定引數,就是對它上面的r=1,p=8,那麼,對它上面的每個點,就計算lbp_(p,r)^(riu2),它是乙個整數。也就是說,每個點,在給定的r和p下,只有這個乙個整數。那麼這20,000個點就是兩萬個整數。將這兩萬個正數,按照lbp_(p,r)^(riu2)的所有可能取值情況,作成乙個直方圖,就是這幅圖的lbp特徵。
如果我們使用的特徵,是r = 3, p =24,那麼,需要多少分配多少記憶體呢?如果p=24,則可能存在的lbp模式的數量是2^24個,也就是說,每個畫素的lbp模式可能是2^24種裡之一。當然,這2^24模式,對應的lbp_(p,r)^(riu2),其實是有限個數量的。這也就相當於,開乙個2^24個元素陣列,占用記憶體是2^24*4個位元組,也就是2^26個位元組,也就是2^6m的記憶體,也就是16m記憶體。這就是為什麼**第2.3節提到的,當p=24時,需要乙個16m的查詢表lookuptable。
2.4節提出根據區域性對比度構造新特徵,這塊沒什麼問題。
2.5節給出計算樣本分類判別方法。比如說,假設紋理有3個bin,紋理1有10%的畫素lbp數在bin1, 10%在bin2,80%在bin3,紋理2有30%的畫素lbp數在bin1, 30%在bin2, 40%在bin3。待判別的紋理的lbp分別是20%,50%和30%。那麼,
l(s, m1) = 0.2*log(0.1)+0.5*log(0.1)+0.3*log(0.8) =-0.2-0.5-0.097=-0.797
l(s, m2) = 0.2*log(0.3)+0.5*log(0.3)+0.3*log(0.4)=
−0.366−0.119=-0.485
取大的,判定s的屬於類m2。這種計算方式,實際上是計算兩個概率分布的距離的離散化。如果兩個概率分布完全一樣,l(s, m)= 0。越接近0越相似。有沒有可能是正數?需要證明,但我感覺不可能是,有時間倒是可以證明下看看。
至此,**裡的lbp演算法就到這裡的,剩下的是實驗,驗證效果。
訓練模型 LBP演算法
lbp指區域性二值模式,英文全稱 local binary patterns。最初功能為輔助影象區域性對比度,並不是乙個完整的特徵描述子。中文名線性反投影演算法 外文名local binary patterns 簡 稱 lbp別 名 累加法屬 性 區域性二值模式 1 數字影象處理 2 介紹 3 演算...
使用vivado hls實現 lbp演算法
lbp演算法的原理不再介紹,下面只介紹一下使用vivado hls如何實現lbp演算法。首先,需要對輸入影象做灰度變換,將rgb影象轉為灰度影象。呼叫hls中的 hls axivideo2mat input1,img 1 函式即可實現,完成影象灰度的轉換。接下來針對灰度影象做lbp變換。使用hls中...
基於LBP的背景建模演算法
背景建模的方法很多很多!各種方法都有自己的優缺點!這裡簡要的介紹一下基於gmm lbp的背景建模方法。一.背景建模演算法 1 能夠適應光照的變化,樹葉的擺動,可以抗干擾。2 能夠應對背景資訊均值和方差的大幅度變化,針對於這一點,人們常常用多模型進行處理,比如採用混合高斯背景建模。3 能夠處理運動物體...