图像通信系统设计
通信原理课程设计
课题名称:图像通信系统设计
院 系:
专业班级:
姓 名:李阳兵
学 号:
指导老师:侯
设 计 报 告 信息工程学院 13级通信工程班 1301120129 远 韶
时
间:
2015年12月
图像通信系统设计
摘要
本文设计了一个图像通信系统,使用Matlab 编程实现图像压缩和图像重建,其中的编解码算法是基于DCT 变换的JPEG 图像压缩标准。本文仿真是对512*512大小、8bit/pixel灰度、BMP 典型测试图像Lena 进行仿真实验。现实环境里,图像在采集与传输过程中常常混入噪声(高斯噪声、椒盐噪声等),所以本设计测试图像时对模拟图像进行加噪。首先对原图像进行加噪处理,然后再用不同的去噪算法去噪(均值滤波、中值滤波、自适应中值滤波、Wiener 滤波、高斯平滑滤波等),继而对去噪后的图像压缩重建,最后分析系统的压缩性能。经仿真验证,基于DCT 变换的JPEG 的算法并不复杂, 当进行低压缩率的静止图像压缩,图像质量较高;当进行高压缩率的静止图像压缩时, 图像压缩出现“模块效应”, 图像质量急剧下降。
关键词:图像通信系统;Matlab ;JPEG 图像压缩;噪声;压缩性能
目录
1 前言...........................................................3 2 图像通信系统的总体设计......................................3
2.1图像通信系统概述...........................................3
2.2数字图像通信系统的系统框图..................................3
2.3 数字图像压缩系统............................................4
2.4考虑噪声时的压缩系统........................................4 3 基于DCT 变换的JPEG 图像压缩.................................4
3.1 JPEG概述...................................................4
3.2 JPEG有损压缩算法...........................................5
3.3 JPEG的编解码模式...........................................6
3.4 JPEG的优缺点...............................................6
3.5 JPEG图像压缩的步骤.........................................6
3.5.1数据分块.............................................6
3.5.2 DCT处理.............................................7
3.5.3系数量化.............................................7
3.5.4 Z型扫描..............................................8
3.5.5 DC系数编码...........................................9
3.5.6 AC系数编码...........................................9 4 Matlab仿真测试与结果分析..................................10
4.1 JPEG编解码的Matlab 程序流程图............................10
4.2图像压缩与重建仿真结果....................................11
4.3图像加噪仿真结果..........................................11
4.4图像去噪仿真结果..........................................11
4.5压缩性能评价..............................................12 5 总结...........................................................13 6 附录...........................................................14 7 参考文献......................................................19
1、 前言
随着信息技术的发展, 图像信息被广泛应用于多媒体通信和计算机系统中。但是图像具有庞大的数据量, 不便于存储和传输, 必须采用合适的方法对其进行压缩, 因此有必要对图像压缩编码标准进行研究。在众多的图像编码标准中, JPEG标准是一个适用范围很广的静态图像压缩标准, 在数字图像压缩领域得到了广泛应用 。本研究在介绍JPEG 图像压缩原理的基础上, 用Matlab 对标准灰度图像进行JPEG 压缩与重建, 设计出图像通信系统,并分析实验结果, 得出结论。
2、图像通信系统的总体设计
2.1、图像通信系统概述
图像通信系统所传送的主要是人的视觉能够感知到的图像信息,包括自然景物、文字符号、动画图形等。在通信的发送端,首先由图像输入设备将图像信息变为电信号,经光、电等传输媒体传送到通信的接收端,再将其恢复为视觉可以接受的形式。
2.2、数字图像通信系统的系统框图
图1 数字图像系统框图
人眼所感知的景物一般是连续的,被称为模拟图像。连续模拟函数标识的图像无法用计算机进行处理,也无法在各种数字系统中传输或存储,必须将代表图像的连续信号转变为离散信号。这样的变化过程称为图像信号的数字化。经数字化的图像通信系统被称为数字图像通信系统。
2.3 、数字图像压缩系统
图2 数字图像压缩系统的基本组成
2.4、考虑噪声时的压缩系统
图3 考虑噪声时的压缩系统
3、基于DCT 变换的JPEG 图像压缩
3.1 、JPEG 概述
JPEG(Joint Photographic Experts Group)是ISO 和CClTI" 联合制订的适用于连续色调、多级灰度、彩色/单-色静止图像压缩的国际标准。它由联合图像专家组于1993年提出正式标准,主要用于
对静止的连续单色图像和彩色图像压缩和解压缩,有无损压缩和有损压缩两种方式。JPEG 专家组开发了两种基本的压缩算法: ①以离散余弦变换(DCT)为基础的有损压缩算法; ②以预测技术为基础的无损压缩算法。
3.2 、JPEG 有损压缩算法
有损压缩算法是对JPEG 压缩标准的主要应用。在有损压缩算法中, JPEG 算法首先通过DCT 变换去除数据冗余,再使用量化表对DCT 系数进行量化。对量化后的DCT 系数进行编码使其熵达到最小,熵编码采用Huffman 可变字长编码。主要采用基于块的离散余弦变换消除图像的空间冗余, 利用人的视觉系统特性对变换系数进行量化, 最后通过无损变字长熵编码消除视觉冗余和数据统计冗余, 实现图像压缩。译码(或者叫做解压缩) 的过程与压缩编码过程正好相反。下图为JPEG 算法框图。
图4 JPEG算法框图
3.3 、JPEG 的编解码模式
JPEG 允许的4种编解码模式分别是:基于DCT 的顺序模式;基于DCT 的渐进模式;无失真模式以及层次模式。
3.4 、JPEG 的优缺点
JPEG 的优点是适用于各种静止的连续色调图像,允许压缩软件和硬件在许多平台上实现,高压缩比,提供累进模式和分级模式,可部分解压缩图像。缺点是大压缩比时会产生方块和蚊式噪声bJ 。
3.5 、JPEG 图像压缩的步骤
3.5.1、数据分块
对图像进行编码前,将每个分量图像分割成不重叠的8×8像素块, 每一个8×8像素块称为一个数据单元(DU )。在彩色图像中, JPEG 分别压缩图像的每个彩色分量。虽然JPEG 可以压缩通常的红绿蓝分量,但在YCbCr 空间的压缩效果会更好。这是因为人眼对色彩的变化不如对亮度的变化敏感,因而对色彩的编码可以比对亮度的编码粗糙些,这主要体现在不同的采样频率和量化精度上。因此,编码前一般先将图像从RGB 空间转换到YCbCr 空间,再把各分量图像分割成8×8数据块。
在对图像采样时,可以采用不同的采样频率,这种技术称为二次采样。由于亮度比色彩更重要,因而对Y 分量的采样频率可高于对Cb 、Cr 的采样频率,这样有利于节省存储空间。常用的采样方案有
YUV422和YUV411。把采样频率最低的分量图像中一个DU 所对应的像区上覆盖的所有各分量上的DU 按顺序编组为一个最小编码单元(MCU )。对灰度图像而言,只有一个Y 分量,MCU 就是一个数据单元。而对彩色图像而言,以4:1:1的采样方案为例,则一个MCU 由4个Y 分量的DU 、1个Cb 分量的DU 和1个Cr 分量的DU 组成。
3.5.2 、DCT 处理
图像数据块分割后,即以MCU 为单位顺序将DU 进行二维离散余弦变换。对以无符号数表示的具有P 位精度的输入数据, 在DCT 前要减去2P-1,转换成有符号数,而在IDCT 后,应加上2P-1,转换成无符号数。对每个8×8的数据块DU 进行DCT 后, 得到的64个系数代表了该图像块的频率成分,其中低频分量集中在左上角, 高频分量分布在右下角。系数矩阵左上角的叫做直流(DC )系数,它代表了该数据块的平均值,其余63个叫交流(AC )系数。
3.5.3、系数量化
在DCT 处理中得到的64个系数中,低频分量包含了图像亮度等主要信息。在从空间域到频域的变换中,图像中的缓慢变化比快速变化更易引起人眼的注意, 所以在重建图像时,低频分量的重要性高于高频分量。因而在编码时可以忽略高频分量, 从而达到压缩的目的,这也是量化的根据和目的。
在JPEG 标准中,用具有64个独立元素的量化表来规定DCT 域中相应的64个系数的量化精度,使得对某个系数的具体量化阶取决于人眼对该频率分量的视觉敏感程度。理论上,对不同的空间分辨率、
数据精度等情况,应该有不同的量化表。不过,一般采用下图所示的量化表,可取得较好的视觉效果。之所以用两张量化表,是因为Y 分量比Cb 和Cr 更重要些,因而对Y 采用细量化,而对Cb 和Cr 采用粗量化。量化就是用DCT 变换后的系数除以量化表中相对应的量化阶后四舍五入取整。由于量化表中左上角的值较小,而右下角的值较大, 因而起到了保持低频分量、 抑制高频分量的作用。
图5 亮度量化表 图6 色度量化表
3.5.4 、Z 型扫描
DCT 系数量化后,构成一个稀疏矩阵,用Z (Zigzag )形扫描将其变成一维数列,将有利于熵编码。Z 形扫描的顺序如图:
图7 Z形扫描的顺序
3.5.5 、DC 系数编码
DC 系数反映了一个8×8数据块的平均亮度,一般与相邻块有较大的相关性。JPEG 对DC 系数作差分编码,即用前一数据块的同一分量的DC 系数作为当前块的预测值,再对当前块的实际值与预测值的差值作哈夫曼编码。
若DC 系数的动态范围为-1024~+1024,则差值的动态范围为-2047~+2047。如果为每个差值赋予一个码字, 则码表过于庞大。因此,JPEG 对码表进行了简化,采用“前缀码(SSSS )+尾码”来表示。前缀码指明了尾码的有效位数B , 可以根据DIFF 从表10-8中查出前缀码对应的哈夫曼编码。尾码的取值取决于DC 系数的差值和前缀码。如果DC 系数的差值DIFF 大于等于0,则尾码的码字为DIFF 的B 位原码;否则,取DIFF 的B 位反码。
3.5.6 、AC 系数编码
经Z 形排列后的AC 系数,更有可能出现连续0组成的字符串, 从而对其进行行程编码将有利于压缩数据。JPEG 将一个非零DC 系数及其前面的0行程长度(连续0的个数)的组合称为一个事件。将每个事件编码表示为“NNNN/SSSS+尾码”, 其中, NNNN为0行程的长度,SSSS 表示尾码的有效位数B (即当前非0系数所占的比特数),如果非零AC 系数大于等于0, 则尾码的码字为该系数的B 位原码, 否则, 取该系数的B 位反码。
由于只用4位表示0行程的长度,故在JPEG 编码中,最大0行
程只能等于15。当0行程长度大于16时,需要将其分开多次编码, 即对前面的每16个0以“F/0”表示,对剩余的继续编码。 4 、Matlab 仿真测试与结果分析 4.1 、JPEG 编解码的Matlab 程序流程图
根据上面所述的JPEG 压缩编码算法, 要将一幅灰度图像进行压缩编码, 首先把图像分成8 ×8的像素块, 分块进行DCT 变换后, 根据JPEG 标准量化表对变换系数进行量化, 再对直流系数(DC)进行预测编码, 对交流系数(AC)进行Zig2Zag 扫描和可变长编码, 然后根据标准Huffman 码表进行熵编码, 输出压缩图像的比特序列, 实现了图像压缩。在接收端, 则经过Huffma 熵解码、DC 系数和AC 系数可变长解码、反量化后, 再进行反DCT 变换, 得到重建图像。下图为对一幅图像进行JPEG 编、解码的Matlab 程序流程图。
图8 JPEG编、解码的Matlab 程序流程图
在图8所示的程序流程图中, 在进行Huffman 编码时, 由于是对相邻图像块之间的差值进行编码, 在量化后扫描之前要先对DC 系数进行预处理。将量化后DC 的原始值替换成相邻图像块之间的差值,在对AC 系数进行编码时, 又要考虑“63个系数全是零”和“连续出现16个零”这两种特殊情况。
4.2 、图像压缩与重建仿真结果
原始图
像
重建图
像
图9原始图像 图10 JPEG压缩后图像
4.3、图像加噪仿真结果
图11 泊松噪声图12 乘性噪声 图13 高斯噪声
4.4、图像去噪仿真结果
中值滤波
中值
滤波
均值滤波
图
14 图15 图16
(注:图14 均值滤波后图像,图15 中值滤波后图像,图16自适应中值滤波后图像。) 4.5、压缩性能评价
图17 对Lena 图像作不同压缩的实验结果
通过上图可以看出,变量为量化因子不断增加(范围是1-100),
我们随机取得量化间隔为20(若实验想得数据更为精确则可取得间隔更小,即更高的精度)取出几组中间数据进行聚类分析。当量化因子增加一定数值时,压缩比率就会相应降低,随之比特率增加,信噪比增加;反之亦然。通过这样的数据说明,量化因子较大时,压缩后重建图像则更接近原图像,人的肉眼几乎看不出较大差异;反之亦然。
复原图像质量评价有主观评价标准及客观评价标准。评价标准一方面是图像的逼真度,即复原图像与原始图像的偏离程度。另一方面是根据图像的可懂度,即图像能向人或机器提供特征信息的能力。我们经常用的是客观评价,其中PSNR 即峰峰对数信噪比是评价的主要标准,其公式如下:
PSNR = 10 * log10(255*255/MSE)
一般的,当PSNR 超过30dB 时,人的主观感觉很难找出其中的差别。上文压缩算法,通过人的主观感觉丝毫找不出图像质量的变坏。比较原始图像跟压缩后的图像,主观看不出他们的差别,压缩后PSNR 也很高。
5、总结
本文研究设计了图像通信系统,首先介绍了JPEG 压缩编码算法, 接着通过使用Matlab 编程实现了JPEG 图像压缩算法, 对Lena 标准灰度图像进行了实验仿真, 并对实验数据进行分析。实验结果表明, JPEG压缩算法实现简单, 在很大的压缩范围内, 都能得到很好的重建图像质量。利用Matlab 做仿真实验, 方法简单且误差小, 大大提高了图像压
缩的效率和精度。DCT 变换是在最小均方误差准则下得出的次最佳正交变换, 并且有快速算法, 因此它在硬件中也很容易实现, 正是由于具有这些优点, JPEG压缩编码算法在图像压缩领域和图像通信系统中会有越来越多的应用。
在本次课程设计中,有很多不懂的问题一直困扰我,非常感谢王老师在周末时间还来指导我的课程设计,使我的问题都得到了解决。这次课程设计锻炼了我的动手能力、独立思考问题的能力、查找文献和攥写论文的能力,为我今后的毕业设计做好了铺垫,起到了积极的促进作用。 六、附 录 DC 译码程序
function x =DCHuffmanDecoding(bit_seq,bit_len) if (bit_len==3);
elseif(bit_len=5), j=4; elseif(bit_len==10) j=5; elseif(bit_len==12) j=6; elseif(bit_len==14) j=7; elseif(bit_len==16)
j=8; elseif(bit_len==18) j=9; elseif(bit_len==20) j=10; end
m=bit_seq(j:bit_len); if m(1)=='1'
val=bin2dec(m); x=val; Else
val=bitcmp(bin2dec(m),length(m)); x=-val; end
维纳滤波器
I=imread('lena512.bmp'); figure; imshow(I); figure;
title('原始图像');
[m,n]=size(I);
F=fftshift(fft2(I)); k=0.005; for u=1:m for v=1:n
H(u,v)=exp(-k)*(((u-m/2)^2+(v-n/2)^2)); end end G=F.*H;
I0=real(ifft2(fftshift(G)));
I1=imnoise(uint8(I0),'gaussian',0,0.001) figure;imshow(uint8(I1));title('加噪图像'); F0=fftshift(fft2(I1)); K=0.1; for u=1:m for v=1:n
H(u,v)=exp(-k*(((u-m/2)^2+(v-n/2)^2))); H0(u,v)=(abs(H(u,v)))^2;
H1(u,v)=H0(u,v)/(H(u,v)*(H0(u,v)+K)); end end F2=H1.*F0;
I2=ifft2(fftshift(F2)); figure; imshow(uint8(I2)); title('去噪图像 ');
下采样和插值程序段: I=imread('lena512.bmp'); figure; imshow(I,[]); [m,n]=size(I); I1=I(1:2:m-1,1:2:n-1);
[m1,n1]=size(I1); Re=zeros(2*m1,2*n1); for i=1:m1,
for j=1:n1,
Re(2*i-1,2*j-1)=ReconImage(i,j); end end
figure,imshow(Re,[]);
for i=2:m1-1,
for j=2:n1-1,
Re(2*i,2*j)=(Re(2*i-1,2*j-1)+Re(2*i+1,2*j+1))/2;
Re(2*i,2*j-1)=(Re(2*i-1,2*j-1)+Re(2*i+1,2*j-1))/2; Re(2*i-1,2*j)=(Re(2*i-1,2*j-1)+Re(2*i-1,2*j+1))/2; end
Re(1,:)=Re(2,:); Re(:,1)=Re(:,2); Re(m1,:)=Re(m1-1,:); Re(:,n1)=Re(:,n1-1); figure;imshow(Re,[]); title('重建图像')
end
参考文献
[1] 邬春明. 通信原理实验与课程设计[M].北京:北京大学出版社,2013.
[2] 黎洪松. 数字通信原理[M].西安:西安电子科技大学出版社,2005.
[3] 阮秋琦. 数字图像处理(第3版)[M].北京:电子工业出版社,2011.
[4] 王家文,李仰军.Matlab7.0图形图像处理[M].北京:国防工业出版社,2006.
[5] 张春田,苏育挺,张静. 数字图像压缩编码[M].北京:清华大学出版社,2006.
[6] 姚庆栋. 图像编码基础(第3版)[M].北京:清华大学出版社,2006.
通信原理课程设计 图像通信系统设计
20