自己写的DCT压缩彩色图片的Matlab程序

来源:互联网 发布:宝贝标题关键词优化 编辑:程序博客网 时间:2024/05/17 02:35

function [varargout] = DCTtest(varargin)
%UNTITLED1 Summary of this function goes here
%  Detailed explanation goes here
clear;

I=imread('thumb.jpg');
I=im2double(I);

S=I*255;
%--------------------------------------------%
T=size(8);
M=8;
for f=1:1:8
    for g=1:8
        i=f-1;
        j=g-1;
          T(f,g)=sqrt(2/M).*cos(pi.*(2.*j+1).*i/2/M);
    end
end
T(1,:) = T(1,:) / sqrt(2);
%--------------------------------------------%
[m n]=size(I)
C=size(I);
a=fix(m/8);b=fix(n/8);

for i=0:a-1
    for j=0:b-1
        N=S(i*8+1:i*8+8,j*8+1:j*8+8);
        Cq=T*N*T';
        C(i*8+1:i*8+8,j*8+1:j*8+8)=Cq;
    end
end

D=C(1:8,1:8)
%--------------------------------------------%
W=[16 11 10 16 24 40 51 61
    12 12 14 19 26 58 60 55
    14 13 16 24 40 57 69 56
    14 17 22 29 51 87 80 62
    18 22 37 56 68 109 103 77
    24 35 55 64 81 104 113 92
    49 64 78 87 103 121 120 101
    72 92 95 98 112 100 103 99];
%--------------------------------------------%
C1=size(C);
for i=0:a-1
    for j=0:b-1
        for f=1:8
            for g=1:8
                p=f+i*8;
                q=g+i*8;
                C1(p,q)=round(C(p,q)/W(f,g));
            end
        end
    end
end
D2=C1(1:8,1:8)
[m n]=size(C1)
%--------------------------------------------%
for i=0:a-1
    for j=0:b-1
        for f=1:8
            for g=1:8
                p=f+i*8;
                q=g+i*8;
                C2(p,q)=C1(p,q)*W(f,g);
            end
        end
    end
end
D3=C2(1:8,1:8)
%--------------------------------------------%
SS=size(C2);
[m n]=size(C2)
for i=0:a-1
    for j=0:a-1
        NN=C2(i*8+1:i*8+8,j*8+1:j*8+8);
        Ciq=T'*N*T;
        SS(i*8+1:i*8+8,j*8+1:j*8+8)=Ciq;
    end
end

II=SS/SS(1,1)
imshow(I,[]);
title('原始图像');
figure;
imshow(SS,[]);
title('DCT变换后的图像')


 

原创粉丝点击