您的位置:首页 > 编程语言 > C语言/C++

LBP C++实现代码

2013-11-02 01:27 211 查看
// FaceRecognize.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "opencv2/opencv.hpp"
#include "CossValidtion.h"
using namespace std;
using namespace cv;
using namespace kl1p;
//#define LEN 30

int 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++)//cell1
a[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++)//cell2
a[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++)//cell3
a[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++)//cell4
a[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++)//cell5
a[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++)//cell6
a[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++)//cell7
a[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++)//cell8
a[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++)//cell9
a[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=522
Mat image = imread("face_database\\001\\meitu_00001.jpg"); //图片为30*30=900的图片,我要把它划成10*10的cell,划9个cell
PixelToBLP(image,*lbp);

cout<<"over"<<endl;
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: