資源簡介
使用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.em
?????文件?????????728??2014-01-21?10:33??face_recognition\face_recognition\Debug\face_recognition.exe.em
?????文件?????????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個文件信息
評論
共有 條評論