使用 SVD 进行 RGB 图像压缩
RGB image compression using SVD
所以我正在尝试使用 SVD 进行图像压缩,但我的代码有错误。我已经尝试查找它,但解决方案不适用于我的情况。
home;
clear all;
I=imread("inputimg.jpg");
I = double(I);
Ir = I(:,:,1);
Ig = I(:,:,2);
Ib = I(:,:,3);
[Ur, Sr, Vr] = svd(Ir,'econ');
[Ug, Sg, Vg] = svd(Ig,'econ');
[Ub, Sb, Vb] = svd(Ib,'econ');
nrows = size(I)(1);
ncols = size(I)(2);
nmodes = 30;
Ur1 = Ur(1:nrows,1:nmodes);
Sr1 = Sr(1:nmodes,1:nmodes);
Vr1 = Vr(1:ncols,1:nmodes);
Ug1 = Ug(1:nrows,1:nmodes);
Sg1 = Sg(1:nmodes,1:nmodes);
Vg1 = Vg(1:ncols,1:nmodes);
Ub1 = Ub(1:nrows,1:nmodes);
Sb1 = Sb(1:nmodes,1:nmodes);
Vb1 = Vb(1:ncols,1:nmodes);
red = Ur1*Sr1*(Vr1');
green = Ug1*Sg1*(Vg1');
blue = Ub1*Sb1*(Vb1');
red = uint8(red);
green = uint8(green);
blue = uint8(blue);
%Isvd = zeros(nrows,ncols,3);
%Isvd(:,:,1) = red;
%Isvd(:,:,2) = green;
%Isvd(:,:,3) = blue;
Isvd = cat(3,red,green,blue);
imwrite(Isvd,"outputimg.jpg");
我在第 14 列第 9 行收到以下错误
()-索引必须出现在索引表达式的最后。
就像@beaker 在他们的评论中指出的那样,nrows = size(I)(1);
在 Matlab 中无效(不过有趣的是,它在 Octave 中)。
将其组合成一条语句,如 nrows = size(I,1)
.
所以我正在尝试使用 SVD 进行图像压缩,但我的代码有错误。我已经尝试查找它,但解决方案不适用于我的情况。
home;
clear all;
I=imread("inputimg.jpg");
I = double(I);
Ir = I(:,:,1);
Ig = I(:,:,2);
Ib = I(:,:,3);
[Ur, Sr, Vr] = svd(Ir,'econ');
[Ug, Sg, Vg] = svd(Ig,'econ');
[Ub, Sb, Vb] = svd(Ib,'econ');
nrows = size(I)(1);
ncols = size(I)(2);
nmodes = 30;
Ur1 = Ur(1:nrows,1:nmodes);
Sr1 = Sr(1:nmodes,1:nmodes);
Vr1 = Vr(1:ncols,1:nmodes);
Ug1 = Ug(1:nrows,1:nmodes);
Sg1 = Sg(1:nmodes,1:nmodes);
Vg1 = Vg(1:ncols,1:nmodes);
Ub1 = Ub(1:nrows,1:nmodes);
Sb1 = Sb(1:nmodes,1:nmodes);
Vb1 = Vb(1:ncols,1:nmodes);
red = Ur1*Sr1*(Vr1');
green = Ug1*Sg1*(Vg1');
blue = Ub1*Sb1*(Vb1');
red = uint8(red);
green = uint8(green);
blue = uint8(blue);
%Isvd = zeros(nrows,ncols,3);
%Isvd(:,:,1) = red;
%Isvd(:,:,2) = green;
%Isvd(:,:,3) = blue;
Isvd = cat(3,red,green,blue);
imwrite(Isvd,"outputimg.jpg");
我在第 14 列第 9 行收到以下错误
()-索引必须出现在索引表达式的最后。
就像@beaker 在他们的评论中指出的那样,nrows = size(I)(1);
在 Matlab 中无效(不过有趣的是,它在 Octave 中)。
将其组合成一条语句,如 nrows = size(I,1)
.