小波图像压缩

流程图如下:

Y
N
Y
N
Y
N
读入图像文件
256级灰度图?
三级小波分解
小波系数处理
图像重构
结束
256色彩图?
三级小波分解
小波系数处理
图像重构
真彩图?
三级小波分解
小波系数处理
图像重构
未知图像处理

条件:Matlab

1、判断图像类型

if isempty(map1)   
    if ismatrix(colorImg)  
         fprintf('灰度图像');
         GrayImg(colorImg);
    end
    if ndims(colorImg)==3  
         fprintf('真彩色图像');
         ColorImg(colorImg,map1);
    end
else
        fprintf('索引图像');
        diag(colorImg);
        IndexImg(colorImg,map1);
End

2、灰度图函数:

设置图框大小、小波基函数、图片颜色
figure('position',[200,100,600,450]);
wavetype='haar';
colormap(gray);

原图像显示
subplot(2,4,1);  %分割图框并设置图像显示位置
imagesc(img);   %显示原图
title('原图');
axis square    %设置坐标系为方形

灰度图一级小波分解
[ca1,ch1,cv1,cd1] = dwt2(img,wavetype); 
subplot(2,4,2);
imagesc([ca1,ch1;cv1,cd1]);
title('一级小波分解');
axis square

二级小波分解
[ca2,ch2,cv2,cd2] = dwt2(ca1,wavetype);
tm=[ca2,ch2;cv2,cd2];
subplot(2,4,3);
imagesc([tm,ch1;cv1,cd1]);
title('二级小波分解');
axis square

三级小波分解
[ca3,ch3,cv3,cd3]=dwt2(ca2,wavetype);
tm=[ca3,ch3;cv3,cd3];
tm=[tm,ch2;cv2,cd2];
subplot(2,4,4);
imagesc([tm,ch1;cv1,cd1]);
title('三级小波分解');
axis square

重构
thr=0;   %阈值
[y]=threshall(ca3,ch3,cv3,cd3,ch2,cv2,cd2,ch1,cv1,cd1,thr,wavetype);
subplot(2,4,5);
imagesc(y);
title('阈值为0的重构');
axis square

3、真彩色图像函数:


%提取RGB分量
R=double(img(:,:,1)); 
G=double(img(:,:,2));
B=double(img(:,:,3));

%一次小波分解
[ra1,rh1,rv1,rd1] = dwt2(R,wavetype);
[ga1,gh1,gv1,gd1] = dwt2(G,wavetype);
[ba1,bh1,bv1,bd1] = dwt2(B,wavetype);
RA1=cat(3,mat2gray(ra1),mat2gray(ga1),mat2gray(ba1));
RH1=cat(3,mat2gray(rh1),mat2gray(gh1),mat2gray(bh1));
RV1=cat(3,mat2gray(rv1),mat2gray(gv1),mat2gray(bv1));
RD1=cat(3,mat2gray(rd1),mat2gray(gd1),mat2gray(bd1));
subplot(2,4,2);
imagesc([RA1,RH1;RV1,RD1]);
title('一级小波分解');
axis square

%二次小波分解
[ra2,rh2,rv2,rd2] = dwt2(ra1,wavetype);
[ga2,gh2,gv2,gd2] = dwt2(ga1,wavetype);
[ba2,bh2,bv2,bd2] = dwt2(ba1,wavetype);
RA2=cat(3,mat2gray(ra2),mat2gray(ga2),mat2gray(ba2));
RH2=cat(3,mat2gray(rh2),mat2gray(gh2),mat2gray(bh2));
RV2=cat(3,mat2gray(rv2),mat2gray(gv2),mat2gray(bv2));
RD2=cat(3,mat2gray(rd2),mat2gray(gd2),mat2gray(bd2));
subplot(2,4,3);
tm=[RA2,RH2;RV2,RD2];
imagesc([tm,RH1;RV1,RD1]);
title('二级小波分解');
axis square

%三次小波分解
[ra3,rh3,rv3,rd3] = dwt2(ra2,wavetype);
[ga3,gh3,gv3,gd3] = dwt2(ga2,wavetype);
[ba3,bh3,bv3,bd3] = dwt2(ba2,wavetype);
RA3=cat(3,mat2gray(ra3),mat2gray(ga3),mat2gray(ba3));
RH3=cat(3,mat2gray(rh3),mat2gray(gh3),mat2gray(bh3));
RV3=cat(3,mat2gray(rv3),mat2gray(gv3),mat2gray(bv3));
RD3=cat(3,mat2gray(rd3),mat2gray(gd3),mat2gray(bd3));
subplot(2,4,4);
tm1=[RA3,RH3;RV3,RD3];
tm=[tm1,RH2;RV2,RD2];
imagesc([tm,RH1;RV1,RD1]);
title('三级小波分解');
axis square

%重构
thr=0;
[RZ]=threshall(ra3,rh3,rv3,rd3,rh2,rv2,rd2,rh1,rv1,rd1,thr,wavetype);
[GZ]=threshall(ga3,gh3,gv3,gd3,gh2,gv2,gd2,gh1,gv1,gd1,thr,wavetype);
[BZ]=threshall(ba3,bh3,bv3,bd3,bh2,bv2,bd2,bh1,bv1,bd1,thr,wavetype);
y=cat(3,mat2gray(RZ),mat2gray(GZ),mat2gray(BZ));
subplot(2,4,5);
imagesc(y);
title('阈值为0的重构');
axis square

注:索引图像处理需要转化为RGB图像外,其余处理与彩色图像类似处理

%转化为RGB图像
img=ind2rgb(img,map);

结果如下所示:
小波图像压缩_第1张图片
小波图像压缩_第2张图片
小波图像压缩_第3张图片

你可能感兴趣的:(多媒体技术,图像处理,计算机视觉)