LBP特徵提取冗餘處理

2021-08-14 16:36:58 字數 1642 閱讀 5448

// lbp特徵提取冗餘處理.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include #include #include #include #include #include #include using namespace cv;

using namespace std;

static int smalltobig(string &src_1,string &src_2)

}//lbp查表

uchar lbp_code[256]=

;//計算直方圖並轉換

static mat hist(mat &src)

; const float *ranges=;

calchist(&src,1,0,mat(),dst,dims,&histsize,&ranges,true,false);

dst=dst/(int)src.total();

return dst.reshape(1,1); }

//把lbp矩陣分成8*8塊,並求直方圖

static mat hist_c(mat src,int gxid_x,int gxid_y,int num )

name.push_back(namespaces);

} //因為根據指令碼得到list.txt,影象順序不是正常順序,所以需要重新排序

sort(name.begin(),name.end(),smalltobig);

//先計算第一張影象的lbp特徵

mat src_1=imread("e:\\opencv\\冗餘處理\\"+name[0]);

mat grayimg_1;

mat src_first;

cvtcolor(src_1,grayimg_1,cv_bgr2gray);

//縮小運算資料256*256

resize(grayimg_1,src_first,size(256,256));

mat lbp_img1=mat::zeros(src_first.rows-2,src_first.cols-2,cv_8uc1);

getlbpfeature(src_first,lbp_img1,8,59);

mat first_img=hist_c(lbp_img1,8,8,59);

//儲存第一張影象

imwrite("e:\\opencv\\冗餘處理\\冗餘後影象\\"+name[0],src_1);

//計算剩餘張數的lbp特徵

for (int i=1;i(src,lbp_img,8,59);

mat img=hist_c(lbp_img,8,8,59);

//比較兩幅圖的相似度

double ratio=histcompare(first_img,img);

//判斷,設定冗餘條件

if (ratio<0.65)

else

//如果連續10張相似,則儲存第10張

if (idx==10)

}return 0;

}

利用等價lbp特徵提取,相似度小於0.65的儲存,如果有連續10張相似,則儲存第10張,再用它與下一張進行對比。

LBP特徵提取

基本原理 lbp的基本思想是以影象中某個畫素為中心,對相鄰畫素進行閾值比較。如果中心畫素的亮度大於等於它的相鄰畫素,把相鄰畫素標記為1,否則標記為0。我們可以用二進位制數字來表示lbp圖中的每個畫素的lbp編碼,比如下圖中的中心畫素,它的lbp編碼為 00010011,其十進位制值為19。用公式表示...

LBP特徵提取實現

捯飭了一兩天才搞好!在lbp.m下輸入下面 執行結果如圖 i imread rice.png using uniform patterns subplot 2,1,1 stem h1 h2 lbp i subplot 2,1,2 stem h2 sp 1 1 1 0 1 1 0 1 0 1 1 1 ...

LBP特徵提取演算法的提取與實現

lbp的基本思想是對影象的畫素和它周圍8個畫素進行比較,然後求和。如果中心畫素的亮度大於等於他的相鄰畫素,把他標記為1,否則標記為0。最終可以獲取2 8個可能的組合,稱為區域性二值模式或lbp碼。這樣做的原理 因為對於一張,相鄰畫素之 間的的值是有關係的。因此中心點和相鄰畫素比較後就能得到乙個二進位...