• 大小: 1.44MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-27
  • 语言: 其他
  • 标签: PCA  人脸识别  

资源简介

使用opencv2.4.3读图,使用QR算法求解特征值特征向量,PCA由C实现。能跑!

资源截图

代码片段和文件信息

// face_recognition.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include “Process.h“
#include “My_Matrix.h“

int _tmain(int argc _TCHAR* argv[])
{
double *T*L*m*b*q*c*p_q*projected_train*T_test*projected_test*eigenvector*Euc_dist;
double epstemp;
int ijflagiterationnum_q;
char res[20];
IplImage *tmp_img*test_img;

T = (double *)malloc(sizeof(double)*IMG_HEIGHT*IMG_WIDTH*TRAIN_NUM); //原始数据
T_test = (double *)malloc(sizeof(double)*IMG_HEIGHT*IMG_WIDTH*1); //测试数据
m = (double *)malloc(sizeof(double)*IMG_HEIGHT*IMG_WIDTH); //平均值
L = (double *)malloc(sizeof(double)*TRAIN_NUM*TRAIN_NUM); //L=T‘*T,协方差矩阵
b = (double *)malloc(sizeof(double)*TRAIN_NUM); //L的特征值
q = (double *)malloc(sizeof(double)*TRAIN_NUM*TRAIN_NUM); //L特征值对应的特征向量
c = (double *)malloc(sizeof(double)*TRAIN_NUM); //实对称三对角矩阵的次对角线元素

eps = 0.000001;
memset(L0sizeof(double)*TRAIN_NUM*TRAIN_NUM);

//存储图像数据到T矩阵
for (i=1;i<=TRAIN_NUM;i++)
{
sprintf(res“.\\TrainDatabase\\%d.jpg“i);
tmp_img = cvLoadImage(resCV_LOAD_IMAGE_GRAYSCALE);
load_data(Ttmp_imgi);
}

//求T矩阵行的平均值
calc_mean(Tm);

//构造协方差矩阵
calc_covariance_matrix(TLm);

//求L的特征值,特征向量
iteration = 60;
cstrq(LTRAIN_NUMqbc);
flag = csstq(TRAIN_NUMbcqepsiteration); //数组q中第j列为数组b中第j个特征值对应的特征向量
if (flag<0)
{
printf(“fucking failed!\n“);
}else
{
printf(“success to get eigen value and vector\n“);
}

//对L挑选合适的特征值,过滤特征向量
num_q=0;
for (i=0;i {
if (b[i]>1)
{
num_q++;
}
}
p_q = (double *)malloc(sizeof(double)*TRAIN_NUM*TRAIN_NUM); //挑选后的L的特征向量,仅过滤,未排序
projected_train = (double *)malloc(sizeof(double)*TRAIN_NUM*num_q); //投影后的训练样本特征空间
eigenvector = (double *)malloc(sizeof(double)*IMG_HEIGHT*IMG_WIDTH*num_q);//Pe=λeQ(Xe)=λ(Xe),投影变换向量
pick_eignevalue(bqp_qnum_q);
get_eigenface(p_qTnum_qprojected_traineigenvector);

//读取测试图像
test_img = cvLoadImage(“.\\TestDatabase\\4.jpg“CV_LOAD_IMAGE_GRAYSCALE);
projected_test = (double *)malloc(sizeof(double)*num_q*1);//在特征空间投影后的测试样本
for (i=0;i {
for (j=0;j {
T_test[i*IMG_WIDTH+j] = (double)(unsigned char)test_img->imageData[i*IMG_WIDTH+j] - m[i*IMG_WIDTH+j];
}
}

//将待测数据投影到特征空间
memset(projected_test0sizeof(double)*num_q);
matrix_mutil(projected_testeigenvectorT_testnum_qIMG_WIDTH*IMG_HEIGHT1);

//计算projected_test与projected_train中每个向量的欧氏距离
Euc_dist = (double *)malloc(sizeof(double)*TRAIN_NUM);
for (i=0;i {
temp = 0;
for (j=0;j {
temp = temp + (projected_test[j]-projected_train[j*TRAIN_NUM+i])*(projected_test[j]-projected_train[j*TRAIN_NUM+i]);
}
Euc_dist[i] = temp;
//printf(“%f \n“temp);
}
//寻找最小距离
double min = Euc_dist[0];
int label;
for (i=0;i {
if (min>=Euc_dist[i])
{
min = Euc_dist[i];
label = i;
}
}
printf(“%d.jpg is mathcing!“label+1);
return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-01-21 13:04  face_recognition\
     目录           0  2014-01-21 10:37  face_recognition\Debug\
     文件       36864  2014-01-21 12:45  face_recognition\Debug\face_recognition.exe
     文件      361264  2014-01-21 12:45  face_recognition\Debug\face_recognition.ilk
     文件     1412096  2014-01-21 12:45  face_recognition\Debug\face_recognition.pdb
     目录           0  2014-01-21 12:28  face_recognition\face_recognition\
     文件         914  2014-01-19 10:55  face_recognition\face_recognition.sln
     文件       15360  2014-01-21 12:51  face_recognition\face_recognition.suo
     目录           0  2014-01-21 12:45  face_recognition\face_recognition\Debug\
     文件       11206  2014-01-21 12:45  face_recognition\face_recognition\Debug\BuildLog.htm
     文件         663  2014-01-21 10:32  face_recognition\face_recognition\Debug\face_recognition.exe.embed.manifest
     文件         728  2014-01-21 10:33  face_recognition\face_recognition\Debug\face_recognition.exe.embed.manifest.res
     文件         621  2014-01-21 12:45  face_recognition\face_recognition\Debug\face_recognition.exe.intermediate.manifest
     文件      121731  2014-01-21 12:44  face_recognition\face_recognition\Debug\face_recognition.obj
     文件     3211264  2014-01-21 10:32  face_recognition\face_recognition\Debug\face_recognition.pch
     文件          65  2014-01-21 12:45  face_recognition\face_recognition\Debug\mt.dep
     文件       12754  2014-01-21 10:32  face_recognition\face_recognition\Debug\My_Matrix.obj
     文件      100388  2014-01-21 12:44  face_recognition\face_recognition\Debug\Process.obj
     文件       12245  2014-01-21 10:32  face_recognition\face_recognition\Debug\stdafx.obj
     文件      633856  2014-01-21 12:44  face_recognition\face_recognition\Debug\vc90.idb
     文件      987136  2014-01-21 12:44  face_recognition\face_recognition\Debug\vc90.pdb
     文件        3241  2014-01-21 10:45  face_recognition\face_recognition\face_recognition.cpp
     文件        5517  2014-01-21 10:37  face_recognition\face_recognition\face_recognition.vcproj
     文件        1409  2014-01-21 12:51  face_recognition\face_recognition\face_recognition.vcproj.jst-PC.jst.user
     文件        3086  2014-01-21 10:32  face_recognition\face_recognition\My_Matrix.cpp
     文件         305  2014-01-21 10:31  face_recognition\face_recognition\My_Matrix.h
     文件        2480  2014-01-21 12:28  face_recognition\face_recognition\Process.cpp
     文件         413  2014-01-21 10:38  face_recognition\face_recognition\Process.h
     文件        1237  2014-01-19 10:55  face_recognition\face_recognition\ReadMe.txt
     文件         221  2014-01-19 10:55  face_recognition\face_recognition\stdafx.cpp
     文件         233  2014-01-19 10:55  face_recognition\face_recognition\stdafx.h
............此处省略34个文件信息

评论

共有 条评论