请教高手:关于使用PCA算法实现人脸识别系统(C代码)
目前在用OPENCV和C实现PCA算法,以下是我对该算法过程的一些理解,先请各位高手帮忙看看理解的有没有问题:
1、从YALE人脸库中读取了20张训练图片(4个人,每个人5张照片)
2、计算这20张照片的平均图片(将所有图片的对应像素的灰度值累加除20)
3、将这20张训练图片合并成一个10000行*20列的矩阵——训练矩阵——X
4、将每张训练图片减去平均图片,并合并为一个10000行*20列的矩阵——去均值矩阵——A
5、矩阵A的转置矩阵AT*A,并将每个元素除以20,得到20*20的协方差矩阵C
6、计算协方差矩阵C的特征值和特征向量,其中特征值为一个20*20的对角矩阵——W,特征向量矩阵为20*20的U_test
7、计算W的-1/2次方矩阵,得到矩阵——W_M
8、计算XT*U_test*W_M,得到子空间矩阵——U(10000行*20列)
完成以上操作后,按照论文上的说法,子空间矩阵中的每个列向量为一个特征脸。通过单步调试,我发现U中的每个数值都非常小,而且都比较接近,通过归一化到0~255空间后,除了最后一个向量可以显示为特征脸的样子以外,其余向量中的数值都非常接近255,显示出一张白色的图片。下面是我的两个问题:
1、以上算法的实现过程是否有误?
2、如何显示特征脸?
注:以上过程用matlab也实现了 结果是一致的