LBP C++实现代码

// 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;
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值