我要拍摄一张图像,使用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