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; }
相关文章推荐
- LBP C++实现代码
- C/C++实现strcpy,strcat,strlen,strcmp标准实现代码
- 二叉树的基本操作 C++代码实现
- 查找二叉树的C++代码实现
- 复数四则运算-c++代码实现及运行实例结果
- 【编程题目】数值的整数次方——关于代码完整性及错误处理方式的探讨(C++实现)
- 复数乘法运算(三次实数乘法)-c++代码实现及运行实例结果
- 雇佣问题(hireassistant)-c++代码实现及运行实例结果
- C++实现DPM/LatentSVM 完整代码下载 --- 第三篇
- C++ 构造双向链表的实现代码
- 归并排序的原理,c++代码实现
- 雇佣问题随机排列数组(permuteBySorting)-c++代码实现及运行实例结果
- 雇佣问题原址排列给定数组(randomize In Place)-c++代码实现及运行实例结果
- 球与箱子-c++代码实现及运行实例结果
- 在线雇佣问题(onlineMaximumHireAssistant)-c++代码实现及运行实例结果
- C/C++实现如下 根据Merge Sort原理, 自己实现的归并排序算法+详细注释+代码(C#,C/C++)
- 生日悖论扩展引申1-c++代码实现及运行实例结果
- 读取JPG图片的Exif属性(三) - Exif属性读取GPS信息代码(C/C++实现)
- 数据结构之栈的初始化、创建、入栈、出栈、销毁-c++代码实现及运行实例结果
- [UE4]C++代码实现播放粒子特效