欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MATLAB数字图像处理实验四

程序员文章站 2022-04-01 10:44:36
...

MATLAB数字图像处理实验四

实验一:选择一种有损压缩编码算法(K-L变换或DCT变换)对l图像进行压缩编码,计算出压缩率,并显示编码前图像

%%
%实验一(计算压缩率,显示编码前图片)
%%利用DCT变换进行图像压缩
K=imread('hei.png'); 
I1=rgb2gray(K);
I=im2double(I1);
T=dctmtx(8);
B=blkproc(I,[8 8],'P1*x*P2',T,T');
mask=[1 1 1 1 0 0 0 0;1 1 1 0 0 0 0 0;1 1 0 0 0 0 0 0;1 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0];
B2=blkproc(B,[8 8],'P1.*x',mask);
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
subplot(211),imshow(K),title('原图');
subplot(212),imshow(I2),title('DCT变换');
[m n]=size(B2);
J=[m n];
for i=1:m
    value=B2(i,1);
    num=1;
    for j=2:n
        if B2(i,j)==value
            num=num+1;
        else
            J=[J num value];
            num=1;
            value=B2(i,j);
        end
    end
    J=[J num value ];
end
disp('原图像大小')
whos('B2');
disp('压缩图像大小:')
whos('J');
disp('图像的压缩比:')
%disp(m*n/length(J))%解压缩
u1=m*n;
u2=length(J);
c=vpa((u2/u1)*100,4);
disp([char(c),'%'])
t1=J(1);
t2=J(2);
K(1:t1,1:t2)=0;
i1=1;
j1=1;
for i=3:2:length(J)
    c1=J(i);
    c2=J(i+1);
    for j=1:c1
        K(i1,j1)=c2;
        j1=j1+1;
        if j1>t2
            i1=i1+1;
            j1=1;
        end
    end
end