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

16074310-实训作业3

作者:汪丽琼   发布时间:2019-05-21 21:57:16   浏览次数:97

实训作业3

1.压缩灰色图片

分析与解答:

第一题的试验内容是对灰色图像的压缩重构,找一张灰色的图片,它的维度是2,使用imread函数读入图像I,形成矩阵像素,使用im2double函数转化照片I的格式为double。根据矩阵的像素值构造实部为0的四元数A。对矩阵A进行奇异值分解,形成U(正交矩阵)S(对角矩阵)V转置(正交矩阵)。可以使用for循环分别取USV(转置)的前k,实现图片的压缩。

代码:

I=imread('D:grey.jpg');

I=im2double(I);

[U S V]=svd(I);

for k=1:10

   Ik=U(:,1:k)*S(1:k,1:k)*V(:,1:k)';

   figure;

   imshow(Ik);    %转换成uint8格式 才能显示图片

end

试验结果:

原图





2.压缩彩色图片

分析与解答:

第二题的试验内容是对彩色图像的压缩重构,找一张彩色的图片,它的维度是3,使用imread函数读入图像I,形成矩阵像素,使用im2double函数转化照片I的格式为double。根据矩阵的像素值构造实部为0的四元数AA的虚部是IGR,B。对矩阵A进行奇异值分解,使用函数svdQ,形成U(四元数)S(对角矩阵)V转置(四元数)。可以使用for循环分别取USV(转置)的前k,实现图片的压缩。需要注意的是,UV 是四元数,它们的前k列表示每一个部分的前k列,S 是实对称矩阵,这里代码中,取了S的前4*k行形成四元数的4 个部分。调用timesQ函数计算四元数IK,提取IKR,G,B,使用 cat函数形成新图,imshow函数画出图像。

程序中涉及到的其他函数均在老师共享文件LANQSVDToolbox中。

代码:

主程序

I=imread('D:tets.jpg');

%I=imread('D:mao.jpg');

R=I(:,:,1);

G=I(:,:,2);

B=I(:,:,3);

R=im2double(R);

G=im2double(G);

B=im2double(B);

A0=zeros(200,180);

%A0=zeros(192,256);

A=[A0, G, R, B];

[U, S ,V]=svdQ(A);

for k=1:15

C=U;

[C0 C1 C2 C3]=A2A0123(C);

CK=[C0(:,1:k) C2(:,1:k) C1(:,1:k) C3(:,1:k)];

D=V;

[D0 D1 D2 D3]=A2A0123(D);

DK=[D0(:,1:k) D2(:,1:k) D1(:,1:k) D3(:,1:k)];

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

S2=S(k+1:2*k,k+1:2*k);

S1=S(2*k+1:3*k,2*k+1:3*k);

S3=S(3*k+1:4*k,3*k+1:4*k);   %S是实矩阵 虚部补零

SK=[S0 S2 S1 S3];

[S0 S2 S1 S3]=A2A0123(SK);

Ik=timesQ( CK,SK );

Ik=timesQ(Ik,transQ(DK));

E=Ik;

[E0 E1 E2 E3]=A2A0123(E);

Ek=cat(3,E1, E2 ,E3);

figure

imshow(Ek);

end

svdQ.m

function [U,D,V]=svdQ(A)

[U,B,V]=bidiagQ(A);

[u,D,v]=svd(B);

U=U*blkdiag(u,u,u,u);

V=V*blkdiag(v,v,v,v);

试验结果:

原图:


试验结果:




原图  (像素改为192,256











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

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

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