我試圖使用奇異值分解壓縮給定的圖像。我想我已經擁有了它,直到我注意到我在整個過程中不斷出現垃圾顏色的像素。嘗試壓縮圖像時出現彩色像素(包括圖片)
在右上部示出的數字表示迭代次數,其中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中做過這樣的程序,但我認爲它可以只是壓縮結果。您是否將結果與使用類似壓縮方法的其他結果進行比較? – HericDenis 2012-11-05 11:20:53
白色像素是否可以由上溢/下溢引起?例如,最初爲黑色(0)的像素由於有損壓縮而變爲-0.01,該值被舍入爲-1,然後在屏幕上變爲255。 – 2012-11-20 07:36:07