區域性二值模式(local binary pattern,lbp)是一種描述影象紋理特徵的運算元,它具有旋轉和灰度不變性。一般不將lbp圖譜作為特徵向量用於分類識別,而是採用lbp特徵值譜的統計直方圖作為特徵向量用於分類識別。
原始lbp是在3*3的視窗內,以視窗中心元素為閾值,比較周圍8個畫素,若大於中心畫素點,則標記為1,否則為0。然後這8個點就可以產生乙個8位的二進位制數(共有2^8=256種),轉換為10進製數後,這個值就用來代替畫素中心值。
void lbp(iplimage* src, iplimage* dst)//原始lbp
cv_image_elem(dst, uchar, i, j) = temp; //將最後的lbp值賦值給中心畫素
} }}int main()
由於原始lbp只是覆蓋了乙個固定半徑範圍內的小區域,不能滿足不同尺寸和頻率紋理的需要。對此,將3*3領域擴充套件到任意領域,用圓形領域代替正方形領域。
旋轉不變lbp即是在8種不同lbp模式下(按位平移,最高位移動到最低位),取其最小值。
由於乙個lbp運算元可以產生不同的二進位制模式,過多的模式種類對於紋理的識別、分類和資訊的訪問是不利的。均勻lbp就是乙個二進位制序列從0到1或者從1到0的變化不超過2次。將二進位制序列首尾相連,總共有59種(變化次數為0的有2種,1的有0種,2的有56種,其他為1種)。因為發現計算出來的大部分值在58種之中,可達到90%以上,所以把值分為了59個,58個不超過2次的為一類,另外其他的為一類。這樣就從原來的256維降到了58維。
#include #include #include #include using namespace cv;
using namespace std;
int gethopcount(uchar i)
; int k = 7;
int cnt = 0;
while (i)
for (int k = 0; k<8; ++k) }
return cnt;
}void lbp59table(uchar* table) }}
void ulbp(iplimage* src, iplimage* dst)//均勻lbp
cv_image_elem(dst, uchar, i, j) = table[temp];
} }}int main()
(1)將檢測視窗劃分為16*16的小區域(cell)。
(2)對於每個cell中的乙個畫素,計算得到它的lbp值。
(3)計算每個cell的直方圖,即每個lbp值出現的頻率,然後歸一化。
(4)統計每個cell的直方圖,連線成乙個向量。
OpenCV 93 物件檢測 LBP特徵介紹
區域性二值模式 local binary pattern 主要用來實現2d影象紋理分析。其基本思想是用每個畫素跟它周圍的畫素相比較得到區域性影象結構,假設中心畫素值大於相鄰畫素值則則相鄰畫素點賦值為1,否則賦值為0,最終對每個畫素點都會得到乙個二進位制八位的表示,比如11100111。假設3x3的視...
opencv筆記 8 Haar特徵
haar特徵由邊緣特徵 線性特徵 中心特徵和對角線特徵組合成特徵模板。特徵模板中有白色和黑色兩種矩形,模板的特徵值則為白色矩形畫素減去黑色矩形畫素之和。haar特徵反應了影象灰度變化的情況。對於圖中a,b,d這類特徵v sum 白 sum 黑 而對於c來說則v sum 白 2 sum 黑 積分圖就是...
Opencv學習筆記(三) 特徵點匹配
在我們提取到帶特徵點和得到特徵描述符後,接下來的工作就是將這些個特徵點進行匹配。一 特徵點匹配位於feature2d的模組中所以在使用的時候應該在標頭檔案中加入 include features2d features2d.hpp 在這個模組中用有三個類 它們的繼承關係如下 對於特徵點匹配有兩種方法 ...