小编mic*_*ah5的帖子

使用SVD而不是协方差矩阵来计算特征脸

我正在使用来自AT&T的n = 40张脸的集合(http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html)尝试通过SVD生成本征脸。

首先,我计算平均向量:

平均

然后我从训练集中的每个向量中减去它,将新向量整形为by(p * q)矩阵x的1 by(p * q)列向量,然后计算出一个矩阵X,使X = (1/sqrt(n))*x。(这里是问题所在:我在X中的所有结果都四舍五入为0,导致本征面的黑色图像结果如下所示)

然后,我计算此矩阵X的SVD,并尝试通过将q整形为ap来获得the矩阵第一列的第一本征面

但是,这是我的结果:

特征面1

谁能在下面的代码中发现我的错误?任何答案都非常感谢

n = 40;
%read images
A = double(imread('faces_training/1.pgm'));
f(:, :, 1) = A;
for j = 2:n
    f(:, :, j) = double(imread(['faces_training/',num2str(j),'.pgm']));
    A = A + f(:, :, j);
end
%calculate average
a = (1/n)*A;
%imshow(uint8(a))
for i = 1:n
%subtract from images
    x_vector(:, i) = reshape(f(:, :, i) - a, [], 1);
end
X = (1/sqrt(n))*x_vector;
%svd
[U S V] …
Run Code Online (Sandbox Code Playgroud)

matlab image-processing computer-vision svd

5
推荐指数
1
解决办法
390
查看次数

标签 统计

computer-vision ×1

image-processing ×1

matlab ×1

svd ×1