利用等價lbp特徵提取,相似度小於0.65的儲存,如果有連續10張相似,則儲存第10張,再用它與下一張進行對比。// 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特徵提取
基本原理 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碼。這樣做的原理 因為對於一張,相鄰畫素之 間的的值是有關係的。因此中心點和相鄰畫素比較後就能得到乙個二進位...