我要拍攝一張圖像,使用imread()
將其轉換爲一組3個矩陣,然後使用N=1,2,3,4,8,16,32,64,128
項計算每個矩陣的截斷和近似值。我有矩陣,但我不確定最後一部分,讀數有點含糊。它們通過截斷和近似來表示什麼?基於給定答案
更新:
我試過如下:
A = double(imread("image.jpg"))/255;
[U1, S1, V1] = svd(A(:,:,1));
[U2, S2, V2] = svd(A(:,:,2));
[U3, S3, V3] = svd(A(:,:,3));
N = 128;
trunc_image = (U1(1:763,1:N)*S1(1:N,1:N)*V1(1:N,1:691))*255;
imwrite(trunc_image, "truncimg.jpg", "jpg");
...但由此產生的圖像看起來是這樣的:
代替使用從['svd']所有的奇異值(的http://www.mathworks.com/help/ matlab/ref/svd.html),你只能使用最大(我認爲是絕對值),從*最大到(根據你的列表)128個最大值。 – TroyHaskin
@TroyHaskin你是什麼意思?我使用這些值*作爲什麼?* – whatwhatwhat
圖像具有所有這些信息:圖像A的矩陣形式可以通過SVD分解,並且總和'sigma_k * u_k * v_k.''正好是'A '。但是,只能通過總和最大的奇異值而不是所有的奇異值來近似「A」。如果'N'(近似項中的項數)小於'R'(奇異值的總數),則可以用很少的計算得到一個很好的近似值。 – TroyHaskin