Matlab图像处理教程系列之图像压缩

数字图像通常需要很大的比特数,这给图像的传输和存储带来相当大的困难。例如用8bit存储一幅512512的灰度图像的比特数为256K。而一部60分钟的彩色电影,如果每秒放映24帧,数字化后每帧包含512512像素,每像素的R、G、B分量分别占8bit,则这样一部电影的总比特数为64800M,若用一张600M的CD存储则需要100多张CD光盘来存储。由此可见对图像数据进行压缩显得非常必要。减少存储空间、缩短传输时间这成为促进图像压缩编码技术发展的主导因素。图像压缩是通过编码来实现的,所以通常将压缩与编码统称为图像的压缩编码。图像压缩编码从本质上来说就是对要处理的图像数据按照一定的规则进行变换和组合,从而达到以尽可能少的数据来表示尽可能多的数据信息。

1.数据的冗余

大多数信息的表达都存在着一定的冗余度(相关性),通过采用一定的模型和编码方法,可以降低这种冗余度。

设:为表达一个信息,方法A用了n1个数据,改进方法B用了n2个数据(压缩数据):

压缩率(压缩比):C = n1 / n2

相对数据冗余:R = 1 – 1/C

2.图像数据中的冗余

三种数据冗余:编码冗余、像素冗余、视觉心理冗余

(1)编码冗余:如果一个图像的灰度级编码,使用了多于实际需要的编码符号,就称该图像包含了编码冗余。

(2)像素冗余(像素间相关)

任何给定位置像素值,原理上均与相邻像素相关,都可以通过它的邻居预测到,单个像素携带的信息相对较少。

对于一幅图像,大量单个像素对视觉的贡献是冗余的。这是建立在对邻居值预测的基础上。

例:原图像数据:234 223 231 238 235

      压缩后数据: 234 -11 8 7 -3

(3)视觉心理冗余

一些信息在一般视觉处理中比其它信息的相对重要程度要小,这种信息就被称为视觉心理冗余。

人类的视觉系统由于受生理特性的限制,对于图像场的注意是非均匀的,人对细微的颜色差异感觉不明显。 例如,人类视觉的一般分辨能力为26灰度等级,而一般的图像的量化采用的是28灰度等级,即存在视觉冗余。 人类的听觉对某些信号反映不太敏感,使得压缩后再还原有允许范围的变化,人也感觉不出来。

3.利用图像数据的冗余开展压缩

(1)因为有编码冗余和像素冗余,当我们将图像信息的描述方式改变之后,可以压缩掉这些冗余,进行“无损”压缩。

(2)因为有主观视觉冗余,当我们忽略一些视觉不太明显的微小差异,可以进行所谓的“有损”压缩。

close all; clear all; clc;I=imread('lena.jpg'); %读入图像I1=rgb2gray(I);I2=I1(:); %将原始图像写成一维的数据并设为 I2I2length=length(I2); %计算 I2 的长度I3=im2bw(I1,0.5); %将原图转换为二值图像,阈值为 0.5%以下程序为对原图像进行行程编码,压缩X=I3(:); %令 X 为新建的二值图像的一维数据组L=length(X);j=1;I4(1)=1;for z=1:1:(length(X)-1) %行程编码程序段    if X(z)==X(z+1)        I4(j)=I4(j)+1;    else        data(j)=X(z); % data(j)代表相应的像素数据        j=j+1;        I4(j)=1;    endenddata(j)=X(length(X)); %最后一个像素数据赋给 dataI4length=length(I4); %计算行程编码后的所占字节数,记为 I4lengthCR=I2length/I4length; %比较压缩前于压缩后的大小%下面程序是行程编码解压l=1;for m=1:I4length    for n=1:1:I4(m);        decode_image1(l)=data(m);        l=l+1;    endenddecode_image=reshape(decode_image1,256,256); %重建二维图像数组h=figure,set(h,'color','white')x=1:1:length(X);subplot(131),plot(x,X(x)); %显示行程编码之前的图像数据y=1:1:I4length ;subplot(132),plot(y,I4(y)); %显示编码后数据信息u=1:1:length(decode_image1);subplot(133),plot(u,decode_image1(u)); %查看解压后的图像数据h=figure;subplot(131);imshow(I); %显示原图的二值图像subplot(132);imshow(I3); %显示原图的二值图像subplot(133),imshow(decode_image); %显示解压恢复后的图像set(h,'color','white')disp('压缩比: ')disp(CR);disp('原图像数据的长度:')disp(L);disp('压缩后图像数据的长度:')disp(I4length);disp('解压后图像数据的长度:')disp(length(decode_image1));

qq1575304183

发布了39 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34763204/article/details/104394188