LBP C++实现代码

来源:互联网 发布:archlinux 解压软件 编辑:程序博客网 时间:2024/06/01 23:37
// FaceRecognize.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "opencv2/opencv.hpp"#include "CossValidtion.h"using namespace std;using namespace cv;using namespace kl1p;//#define LEN 30int PixelToBLP(Mat image,arma::Col<klab::DoubleReal> &lbp){int i,j,k,g=0;double lbp_value,a[58][2],sum;a[0][0]=0;a[1][0]=1;a[2][0]=2;a[3][0]=3;a[4][0]=4;a[5][0]=6;a[6][0]=7;a[7][0]=8;a[8][0]=12;a[9][0]=14;a[10][0]=15;a[11][0]=16;a[12][0]=24;a[13][0]=28;a[14][0]=30;a[15][0]=31;a[16][0]=32;a[17][0]=48;a[18][0]=56;a[19][0]=60;a[20][0]=62;a[21][0]=63;a[22][0]=64;a[23][0]=96;a[24][0]=112;a[25][0]=120;a[26][0]=124;a[27][0]=126;a[28][0]=127;a[29][0]=128;a[30][0]=129;a[31][0]=131;a[32][0]=135;a[33][0]=143;a[34][0]=159;a[35][0]=191;a[36][0]=192;a[37][0]=193;a[38][0]=195;a[39][0]=199;a[40][0]=207;a[41][0]=223;a[42][0]=224;a[43][0]=225;a[44][0]=227;a[45][0]=231;a[46][0]=239;a[47][0]=240;a[48][0]=241;a[49][0]=243;a[50][0]=247;a[51][0]=248;a[52][0]=249;a[53][0]=251;a[54][0]=252;a[55][0]=253;a[56][0]=254;a[57][0]=255;sum=0;for(i=0;i<58;i++)//cell1a[i][1]=0;for(i=1;i<10;i++)for(j=1;j<10;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化sum=0;for(i=0;i<58;i++)//cell2a[i][1]=0;for(i=1;i<10;i++)for(j=10;j<20;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化sum=0;for(i=0;i<58;i++)//cell3a[i][1]=0;for(i=1;i<10;i++)for(j=20;j<29;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化sum=0;for(i=0;i<58;i++)//cell4a[i][1]=0;for(i=10;i<20;i++)for(j=1;j<10;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化sum=0;for(i=0;i<58;i++)//cell5a[i][1]=0;for(i=10;i<20;i++)for(j=10;j<20;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化sum=0;for(i=0;i<58;i++)//cell6a[i][1]=0;for(i=10;i<20;i++)for(j=20;j<29;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化sum=0;for(i=0;i<58;i++)//cell7a[i][1]=0;for(i=20;i<29;i++)for(j=1;j<10;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化sum=0;for(i=0;i<58;i++)//cell8a[i][1]=0;for(i=20;i<29;i++)for(j=10;j<20;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化sum=0;for(i=0;i<58;i++)//cell9a[i][1]=0;for(i=20;i<29;i++)for(j=20;j<29;j++){lbp_value=0;if(image.at<uchar>(i-1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+128;if(image.at<uchar>(i-1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+64;if(image.at<uchar>(i-1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+32;if(image.at<uchar>(i,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+16;if(image.at<uchar>(i+1,j+1) >= image.at<uchar>(i,j))lbp_value=lbp_value+8;if(image.at<uchar>(i+1,j) >= image.at<uchar>(i,j))lbp_value=lbp_value+4;if(image.at<uchar>(i+1,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+2;if(image.at<uchar>(i,j-1) >= image.at<uchar>(i,j))lbp_value=lbp_value+1;for(k=0;k<58;k++)if(a[k][0]==lbp_value)//若是uniform{a[k][1]++;sum++;}}for(i=0;i<58;i++)lbp(g++)=a[i][1]/sum;//一范式归一化//cout<<g<<endl;return 0;}int _tmain(int argc, _TCHAR* argv[]){arma::Col<klab::DoubleReal> *lbp = new arma::Col<klab::DoubleReal>(522);//58*9=522Mat image = imread("face_database\\001\\meitu_00001.jpg"); //图片为30*30=900的图片,我要把它划成10*10的cell,划9个cellPixelToBLP(image,*lbp);cout<<"over"<<endl;getchar();return 0;}

原创粉丝点击