圓形領域LBP特徵

2021-06-26 07:36:16 字數 1711 閱讀 8435

今天師兄給了我乙個博士寫的lbp特徵原始碼。上網搜尋了一些資料,並結合**,大致有了思路。

原始lbp特徵是根據相鄰的畫素點與中間相鄰點相比的大小確定置為1或0,然後對每個畫素點的領域資訊進行整合,變為領域個位的數的編碼。然後對乙個塊中所有畫素的編碼進行直方圖的統計,得到lbp特徵。

圓形lbp特徵就是在每乙個畫素點周圍用圓形區域進行編碼取樣,其餘和原始lbp特徵相同。

這裡有圖,說的更加明白 

這裡有乙個問題,假如你在圓上取樣,那必然會導致部分計算出來的取樣點的座標不是整數。而在影象中,每個畫素點的座標都必須是整數。

如下圖所示:若設領域半徑r = 1,且取樣的8個畫素點等間隔的分布在這個圓上。因為紅色標出的點為要計算編碼的畫素點,因此它的座標為整數(x,y)。那麼綠色標出的點的座標必定不是整數,因此也無法從影象上得到這個點的畫素值。

當然簡單的方法可以用最近的乙個點的值進行代替,但更好的方法是進行雙線性插值。

也就是用綠色點周圍的四個點畫素值的線性組合來表示綠色「點」(在實際影象上不存在)的畫素值。

也就是兩次線性插值來完成綠色點的估計

雙線性插值簡單明瞭的講解:

**給出如下,起始很亂...

void calclbph(iplimage *pimg, cvmat* plbph)

//lbp影象畫素灰度值清零

for(i=0; iheight; i++) }

int weight[8]; //八個周邊畫素的權值

weight[0] = 1;

for(i=1;i<8;i++)

weight[i] = 2 * weight[i-1];

//為每個畫素計算lbp編碼

int height = pimg->height;

int width = pimg->width;

double temp[4][2] = ;

double temp_y[4] = ,temp_x[4] = ;

int temp_iy[4] = ,temp_ix[4] = ;

double dis_y[4] = ,dis_x[4] = ;

double wei[4][4] = ;

double end[4] = ;

for(i=2,k=0; i= cvmget(pimg_mat, i, j))

if(end[0] >= (double)cvmget(pimg_mat, i, j))

if(cvmget(pimg_mat,i-2,j) >= cvmget(pimg_mat, i, j))

if(end[1] >= (double)cvmget(pimg_mat, i, j))

if(cvmget(pimg_mat,i,j-2) >= cvmget(pimg_mat, i, j))

if(end[2] >= (double)cvmget(pimg_mat, i, j))

if(cvmget(pimg_mat,i+2,j) >= cvmget(pimg_mat, i, j))

if(end[3] >= (double)cvmget(pimg_mat, i, j))

}} hist_num_make(plbp_mat,plbph);

cvreleasemat(&plbp_mat);

}

LBP特徵(1)原始LBP特徵

參考 一 lbp特徵的背景介紹 lbp指區域性二值模式,英文全稱 local binary pattern,是一種用來描述影象區域性特徵的運算元,lbp特徵具有灰度不變性和旋轉不變性等顯著優點。它是由t.ojala,m.pietik inen,和 d.harwood 1 2 在1994年提出,由於l...

LBP特徵(3)旋轉LBP特徵

參考 從 1 和 2 可以看出,上面的lbp特徵具有灰度不變性,但還不具備旋轉不變性,因此研究人員又在上面的基礎上進行了擴充套件,提出了具有旋轉不變性的lbp特徵。首先不斷的旋轉圓形鄰域內的lbp特徵,根據選擇得到一系列的lbp特徵值,從這些lbp特徵值選擇lbp特徵值最小的作為中心畫素點的lbp特...

LBP紋理特徵

一幅的特徵 紋理特徵 顏色特徵 形狀特徵 空間關係特徵。這裡說記錄一下紋理特徵 lbp local binary pattern 指區域性二值模式,是一種用來描述影象區域性紋理特徵的運算元,lbp特徵具有灰度不變性和旋轉不變性等顯著優點。它是由t.ojala,m.pietik inen,和 d.ha...