【发布时间】:2012-03-29 02:17:36
【问题描述】:
我正在尝试使用奇异值分解来压缩给定的图像。我以为我做到了,直到我注意到在整个过程中不断出现垃圾彩色像素。
右上角显示的数字表示迭代次数,其中 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 生成的值不同。
感谢任何帮助。
谢谢,
贾斯蒂安
【问题讨论】:
-
我不知道这个SVD库,我以前在C#中使用过,在Java中从未做过这种程序,但我想它可能只是压缩结果。您是否将您的结果与使用类似压缩方法的其他人进行了比较?
-
白色像素会不会是上溢/下溢造成的?比如一个原本是黑色(0)的像素,由于有损压缩,变成-0.01,四舍五入到-1,然后在屏幕上变成255……
标签: java image-compression jama