【发布时间】:2019-08-22 21:56:19
【问题描述】:
我想使用特征值和特征向量来压缩图像,因为我已经使用奇异值分解完成了它,但是在尝试使用特征值和特征向量进行压缩时我做错了。
这里有一些代码可以查看我已经尝试过的内容,但是在尝试计算 Z 矩阵时出现了问题。
image_matrix = double(imread(image));
[m n] = size(image_matrix);
miu = zeros(m, 1);
A = [];
for i = 1 : m
miu(i) = mean(image_matrix(i, :));
A(i, :) = image_matrix(i, :) - miu(i);
endfor
Z = A*A'/(n - 1);
[V S] = eig(Z);
W = V(:, 1 : k);
Y = W'*A;
A_k = W*Y + miu;
W*Y+miu 应该已经从上面给了我矩阵 A 的近似值,但它只是给出了一个空白图像。上面的代码接收:一个图像的路径和一个数字k 这样k 是某种近似顺序......我使用('path/to/image', 2) 调用它并且没有得到预期的结果。我也只将它用于黑白图像。
【问题讨论】:
-
@CrisLuengo 你赌错了!不是,我认为
A矩阵是image_matrix的良好均值矩阵。 -
是的,我正在显示诸如
imshow(uint8(A_k));之类的图像,我正在使用每行与行的平均值之间的减法来更新每一行,因为这也是算法的样子我尝试删除它,但仍然没有 -
两件事:1:您没有使用特征值
S。 2:您保留最小特征值的特征向量。八度帮助说特征值没有排序,但我看到这些从小到大排序。 -
你应该使用
imshow(A_k,[])显示。 -
@CrisLuengo 有序特征值有什么意义,我该怎么办?我也这样显示它,它不再是空白的,但它也不是正确的图像
标签: image compression octave eigenvalue