一个修改后的PCA进行人脸识别的Matlab代码
calcxmea
sigmaa
ditseige
decompositio
allsamples所有训练图像fori140
forj15aimreadstrcatDrawdataORLs
um2stri
um2strjpgmimshowaba111292b是行矢量1×N,其中N=10304,提取顺序是先列后
行,即从上到下,从左到右
bdoubleballsamplesallsamplesballsamples是一个MN矩阵,allsamples中每一行数据代表一张图片,其中M=200e
de
dsamplemea
mea
allsamples平均图片,1×Nfori1200xmea
iallsamplesisamplemea
xmea
是一个M×N矩阵,xmea
每一行保存的数据是“每个图片数据平均图片”e
d
sigmaxmea
xmea
MM阶矩阵vdeigsigmad1diagdd2i
dexsortd1以升序排序colssizev2特征向量矩阵的列数fori1cols
vsortivi
dexcolsi1vsort是一个Mcol注col一般等于M阶矩阵,保存的是按降序排列的特征向量每一列构成一个特征向量
dsortid1i
dexcolsi1dsort保存的是按降序排列的特征值,是一维行向量e
d完成降序排列以下选择90的能量dsumsumdsort
dsum_extract0p0whiledsum_extractdsum09
pp1dsum_extractsumdsort1pe
di1训练阶段计算特征脸形成的坐标系whileipdsorti0
fbaseidsorti12xmea
vsortibase是N×p阶矩阵,除以dsorti12是对人脸图像的标准化,详见《基于PCA的人脸识别算法研究》p31
ii1e
d
addbywolfsky就是下面两行代码,将训练样本对坐标系上进行投影得到一个Mp阶矩阵allcoorallcoorallsamplesbaseaccu0
测试过程fori140
forj610读入40x5副测试图像aimreadstrcatDrawdataORLs
um2stri
um2strjpgmba110304bdoublebtcoorbbase计算坐标,是1×p阶矩阵fork1200mdistk
ormtcoorallcoorke
d三阶近邻
disti
dex2sortmdistclass1floori
dex2151class2floori
dex2251class3floori
dex2351ifclass1class2class2class3classclass1elseifclass1class2classclass1elseifclass2class3classclass2e
difclassiaccuaccu1e
d
e
de
daccuracyaccu200输出识别率函数调用是定义函数,然后用函数名进行调用就可以了
fr