现在时间是:
当前位置:首 页 >> Matlab>> 教学区>> 文章列表

实验8 彩色图片的压缩

作者:16074310 余冲冲   发布时间:2019-05-26 22:33:37   浏览次数:127

程序1:


I=imread('test.jpg');

imshow(I);

[m,n]=size(I(:,:,1));

O=zeros(m,n);

R=I(:,:,1);

G=I(:,:,2);

B=I(:,:,3);

R=double(R);

G=double(G);

B=double(B);

A=[O G R B];

[U S V]=svdQ(A);

k=1;

Sx=S(1:k,1:k);

while(sum(sum(Sx))/sum(sum(S))<0.95)%sum(sum(Sx)对矩阵Sx的所有元素求和;sum(sum(S))对矩阵S的所有元素求和;sum(Sx)是对矩阵各个列求和

     Q=timesQ(U(:,[1:k,m+1:m+k,2*m+1:2*m+k,3*m+1:3*m+k]),[Sx,zeros(k,3*k)]);

     Q=timesQ(Q,transQ(V(:,[1:k,n+1:n+k,2*n+1:2*n+k,3*n+1:3*n+k])));

     [Qm,Qn]=size(Q);

     Qn=Qn/4;%??不知道,是因为四元函数的原因吗?

     X(:,:,2)=Q(:,Qn+1:2*Qn);

     X(:,:,1)=Q(:,2*Qn+1:3*Qn);

     X(:,:,3)=Q(:,3*Qn+1:4*Qn);

     figure;

    imshow(uint8(X));

    k=k+1;

    Sx=S(1:k,1:k);

end  

   

这是看了学姐写的,自己对其中的一些不是很了解。


原图:

实验结果图:

程序2:


I=imread('test.jpg');

imshow(I);

R=I(:,:,1);

G=I(:,:,2);

B=I(:,:,3);

R=double(R);

G=double(G);

B=double(B);

[m,n]=size(R);

% O=zeros(m,n);

% A=[O G R B];

Q=[zeros(m,n) G R B];%四个元素矩阵

[U S V]=svdQ(Q);%R,G,B分别用svdQ压缩处理之后的组装

for k=1:20

%选择u的前k列,即是u0.u1u2u3的前k列。

Uk=U(:,[1:k,m+1:m+k,2*m+1:2*m+k,3*m+1:3*m+k]);

Vk=V(:,[1:k,n+1:n+k,2*n+1:2*n+k,3*n+1:3*n+k]);

Sk=[S(1:k,1:k) zeros(k,k) zeros(k,k) zeros(k,k)];

Qk=timesQ(timesQ(Uk,Sk),transQ(Vk));

[m,n]=size(Qk);%重新组装后的矩阵大小

n=n/4;%读出其长度

Gk=Qk(:,n+1:2*n);

Rk=Qk(:,2*n+1:3*n);

Bk=Qk(:,3*n+1:4*n);

%再将R,G,B提出来

Ik(:,:,1)=Rk;

Ik(:,:,2)=Gk;

Ik(:,:,3)=Bk

figure;


imshow(uint8(Ik));

end

原图:

实验结果:


   

从图象中可看出,到第15张时图片的清晰度已经很不错了。

 

       

到最终的第75张图片可以看出和原图没有多大差别。








上一篇:没有了    下一篇:没有了

Copyright ©2019    计算数学达人 All Right Reserved.

技术支持:自助建站 | 领地网站建设 |短信接口 |燕窝 版权所有 © 2005-2019 lingw.net.粤ICP备16125321号 -5