目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

图像压缩的类别

        对于图像压缩,主要有两类方法:无损的图像压缩以及有损的图像压缩,分别称为lossless image compression and lossy image compression。

        对于无损的图像压缩方法,压缩的图像必须是原图像的精准的复制,这种的方法主要用于医学影像等方面,稍微一点的图像损失就会带来较大的风险(比如说错误的医学诊断)。

而有损的图像压缩则更为常见,其主要目的是均衡重建图像的质量以及提高压缩比。

图像的数字表示 Digital Representation of Images

       通常的图像可以被定义为2-D的函数f(x,y), 其中x,y为空间坐标,f的幅值被称为亮度/强度或灰度(brightness, intensity, grey level)。 对于我们常见的图像,可以用矩阵MN表示,每个点有各自的像素值,该像素值用无符号的8bit整数表示,范围为0-255,即我们通常所说的8bit位宽的M*N的图像。同样的对于彩色图像,可以由三个这样的矩阵来表示(RGB, HSV, YUV等),那么此时为24bit的彩色图。

数字图像压缩 Digital Image Compression

一张图像之所以可以被压缩,有着以下几方面的原因:

1. 对于单张图像来说,在邻近的像素之间有着大量的相关性/冗余,称之为空间冗余。因为通常来说,邻近的像素点基本会拥有较为相近的像素值。

2. 对于从多个sensor获得的数据,各自存在着一定的相关性。

       因此,图像压缩方法就是利用了图像中存在的这些冗余性从而得以实现的。图像压缩系统通常分为两部分:压缩以及解压缩(compressor , decompressor)。对于compressor:通常分为预处理以及编码阶段(preprocessing stage and encoding stage);其中,前处理可以进行一些灰度值/空间域的量化;或者是去噪等。在压缩阶段,可以先将图像进行转换至其它的数学空间,使得其可以更容易的进行压缩(比如说转换到YUV空间,或者是DCT变换等)。接下来是量化阶段,将一些连续的数值转换成离散的形式。

        最后的阶段是编码的部分。将得到的数据进行编码后传输。而对于decompressor:通常分为解压缩以及后处理阶段(decoding stage and postprocessing stage).在解压缩阶段,首先做编码对应的解码, 再进行反量化, 以及反向的图像空间域的转换。其过程与compressor里的是一一对应的。其中,后处理可以来减少在压缩过程中产生的一些伪影等。

        小波变换(wavelet transform,WT)是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够充分突出问题某些方面的特征,能对时间(空间)频率的局部化分析,通过伸缩平移运算对信号(函数)逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节,解决了Fourier变换的困难问题,成为继Fourier变换以来在科学方法上的重大突破。

2.仿真效果预览

matlab2022a仿真结果如下:

基于小波变换的图像压缩解压缩的matlab仿真-LMLPHP

 基于小波变换的图像压缩解压缩的matlab仿真-LMLPHP

 基于小波变换的图像压缩解压缩的matlab仿真-LMLPHP

 基于小波变换的图像压缩解压缩的matlab仿真-LMLPHP

3.MATLAB核心程序

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
 
orimg=imread('lena.bmp');
imshow(orimg); 
title('原始图象'); 
orimage=double(orimg);
tImg=wavelet('2D D5',1,orimage,'sym');
tImage=uint8(tImg);
figure; 
imshow(tImage);
Img=zeros(512,512);
Img(1:256,1:256)=tImg(1:256,1:256);
[Image,sc,dmatrix]=double2uint(Img);
x=select(Image);
code=RLC(x);
 
%%%%%%%%%%%%%%%%%%%解码部分%%%%%%%%%%%%%%%%%%
Image=dec(code);
Image_r=uint2double(Image,sc,dmatrix);
IImg=wavelet('2D D5',-1,Image_r,'sym');
IImg=uint8(IImg);
figure;imshow(IImg);
title('恢复图象'); 
diff=orimg-IImg;
figure;imshow(diff);
e=sum(sum(diff))/(sum(sum(orimg)));
 
 
 
total_infor=512*512;
[code_r,code_c]=size(code);pp=(512*512)/code_c;
disp(['压缩前的图像信息大小为:',int2str(total_infor)]);
disp(['压缩后的图像信息大小为:',int2str(code_c)]);
disp(['压缩率为:',num2str(pp),':1']);
disp(['压缩误差为:',num2str(e)]);
A116

4.完整MATLAB

V

12-14 06:35