我正在尝试使用奇异值分解来压缩给定的图像。我以为我拥有它,直到我注意到在整个过程中不断出现垃圾彩色像素。
右上角显示的数字显示了迭代次数,其中 0 是原始图像。
这是一个常见的错误吗?有什么我想念的吗?
我认为这可能与我的数学本身有关。我正在使用 JAMA,这是一个为我处理这个问题的 java 矩阵包。以下是我对每次迭代的实现:
for (int i = 0; i < k; i++) {
Matrix step = (uColumns[i].times(sValues[i])).times(vColumns[i].transpose());
encoded = encoded.plus(step);
}
基本上我正在做的(或试图做的)是:
M = M + (s1*u1*v1^t)
我的实现是否有明显的问题,或者错误可能是由于 JAMA 执行 SVD 的方式造成的?根据我的测试,矩阵 U 和 V 中值的符号在某些行中与 Wolframalpha 或 Matlab 生成的值不同。
任何帮助表示赞赏。
谢谢,
贾斯蒂安