图像变换编码程序设计.docx
- 文档编号:15833340
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:11
- 大小:30.09KB
图像变换编码程序设计.docx
《图像变换编码程序设计.docx》由会员分享,可在线阅读,更多相关《图像变换编码程序设计.docx(11页珍藏版)》请在冰点文库上搜索。
图像变换编码程序设计
0
0
摘要
本设计是基于MATLAB软件的图像变换编码程序设计,介绍了图像的信息熵概念和图像信息熵计算的MATLAB实现方法,对DCT变换和反变换的原理进行了详细介绍,并利用MATLAB和相关函数实现了基于DCT的JPEG图像压缩编码,简单讲述了图像信噪比的概念及意义,利用MATLAB实现了图像经过DCT编码及重构后图像的信噪比的计算。
关键词:
MATLAB,信息熵,DCT变换,JPEG压缩,峰值信噪比
1设计背景及要求
设计背景
数字图像处理是利用计算机或数字技术对图像信息进行加工处理以改善图像质量、压缩图像数据或从图像数据中获取更多信息。
数字图像处理的主要方法可分为两大类:
空域法和变换域法。
图像压缩即去除多余数据。
以数学的观点来看图像压缩过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合。
因此图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码。
图像压缩编码的必要性和可能性:
图像压缩编码的目的是以尽量少的比特数表征图像同时保持复原图像的质量使它符合预定应用场合的要求。
压缩数据量、提高有效性是图像压缩编码的首要目的。
图像数据可以进行压缩有以下几方面的原因:
首先原始图像数据是高度相关的存在很大的冗余度,如空间冗余度,时间冗余度,频率域冗余度。
数据冗余造成比特数浪费消除这些冗余就可以节约码字也就达到了数据压缩的目的,其次基用相同码长表示不同出现概率的符号也会造成符号冗余度;允许图像编码有一定的失真也是图像可以压缩的一个重要原因。
设计要求
(1)学习图像压缩和JPEG压缩的原理和方法;
(2)选择一幅256级的灰度图像,利用matlab设计程序完成以下功能;
(3)计算该图像的信息熵;
(4)利用JPEG的压缩原理,将图像分成8?
8的图像块,计算每个块的DCT系数;
(5)只保留DCT系数矩阵最左上角的10个系数,然后对每个图像块利用这10个系数进行DCT反变换来重构图像,显示重构后的图像;
(5)计算该图像经过离散余弦变换编码及重构后图像的信噪比;
(6)要求阅读相关参考文献不少于5篇;
(7)根据课程设计有关规范,按时、独立完成课程设计说明书。
2图像的信息熵
信息熵与图像熵
自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。
所发出的消息不同,它们所含有的信息量也就不同。
任何一个消息的自信息量都代表不了信源所包含的平均自信息量。
不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量。
信息熵的意义:
信源的信息熵H是从整个信源的统计特性来考虑的。
它是从平均意义上来表征信源的总体特性的。
对于某特定的信源,其信息熵只有一个。
不同的信源因统计特性不同,其熵也不同。
图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。
图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令Pi表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为:
图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。
选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为(i,j),其中i表示像素的灰度值(0<=i<=255),j表示邻域灰度(0<=j<=255),
上式能反应某像素位置上的灰度值与其周围像素灰度分布的综合特征,其中f(i,j)为特征二元组(i,j)出现的频数,N为图像的尺度,定义离散的图像二维熵为:
构造的图像二维熵可以在图像所包含信息量的前提下,突出反映图像中像素位置的灰度信息和像素邻域内灰度分布的综合特征.
图像熵的计算的MTALAB实现
图像熵计算过程:
1)输入一幅图像,并将其转换成灰度图像。
2)统计出图像中每个灰度阶象素概率。
3)统计出图像中相邻两象素的灰度阶联合分布矩阵。
4)根据图像熵和二阶熵公式,计算出一幅图像的熵。
由此,可得图像熵计算的MATLAB程序,如下:
A=imread('E:
\ProgramFiles\MATLAB\R2010b\bin\lena','bmp');%读入图像
n(1:
256)=0;
p(1:
256)=0;
S=0;
H=0;
fori=1:
256%统计像素值
forj=1:
256
n(A(i,j))=n(A(i,j))+1;
end
end
fori=1:
256%计算每个像素值的概率
p(i)=n(i)/(256*256);
end
fori=1:
256%概率和为1
S=S+p(i);
end
fori=1:
256%熵的计算
ifp(i)~=0
H=H+p(i)*log2(1/p(i));
end
end
H
仿真结果
3基于DCT的JPEG图像压缩编码
关于DCT变换及DCT系数
DCT变换
离散余弦变换(DiscreteCosineTransform,DCT)是一种实数域变换,其变换核为实数余弦函数。
对一幅图像进行离散余弦变换后,许多有关图像的重要可视信息都集中在DCT变换的一小部分系数中。
因此,离散余弦变换(DCT)是有损图像压缩JPEG的核心,同时也是所谓“变换域信息隐藏算法”的主要“变换域(DCT域)”之一。
因为图像处理运用二维离散余弦变换,所以直接介绍二维DCT变换。
一个矩阵的二维DCT定义如下:
其中,x,y=0,1,2,…,N-1,式中表示的阵列为N*N。
逆DCT变换定义如下:
,
DCT系数的量化
为了达到压缩数据的目的DCT系数需作量化量化表需针对性地设计。
DCT系数量化是一个十分重要的过程,是造成DCT编解码信息损失(或失真)的根源。
量化过程即经过DCT变换图像的每个系数根据量化表除以各自对应的量化步长,得到量化系数。
量化的作用是在一定的主观保真度图像质量的前提下,丢掉那些对视觉影响不大的信息,以获得较高的压缩比。
量化公式:
量化值(u,v)=[f(u,v)/量化矩阵(u,v)]
DCT系数的性质
当u,v不断增大时,相应的余弦函数的频率也不断增大,得到的系数可认为就是原始图像信号在频率不断增大的余弦函数上的投影,所以也被称为低频系数、中频系数和高频系数。
而且,一个图像的DCT低频系数分布在DCT系数矩阵的左上角,高频系数分布在右下角,低频系数的绝对值大与高频系数的绝对值。
对DCT变换来说,图像的主要能量是集中在其DCT系数的一小部分。
这所谓的“一小部分”就是指的低频部分。
随着u,v阶数的不断增大,图像信号在两组正交函数上的投影值出现了大量的正负相抵消的情景,从而导致了得到的频率系数在数值(绝对值)上的不断减小。
中、低频系数所含有的原始信号的成份较多,所以由其反变换重构图像就能得到图像的近似部分。
高频系数是在众多正交的余弦函数上投影的加权,是这些不同频率的余弦信号一起来刻画原始信号的结果,图像近似的部分在这些函数上被相互抵消了,剩下的就是图像的细节部分了。
程序设计
DCT图像压缩模型
DCT图像压缩模型如图所示:
图DCT图像压缩模型
在编码过程中,将图像分解为8×8的象素块,对这个8×8块进行二维离散余弦变换,每个块就产生了64个DCT系数,其中一个DC系数位于左上角是直流(DC)系数,它表示了8×8输入矩阵全部值的平均数,其余63个系数为交流(AC)系数。
接下来对DCT系数进行量化,相邻的8×8块之间的DC系数有较强的相关性。
最后将量化的DCT系数进行编码和传送,就形成了压缩后的图像格式。
在解码过程中,先对已编码的量化的系数进行解码,然后求逆量化并利用二维DCT反变换把DCT系数转化为8×8样本像块,最后将反变换后的块组合成一幅图像。
这样就完成了图像的压缩和解压过程。
图像块处理的整个过程由函数blkproc自动实现。
函数blkproc的格式为
B=blkproc(A,[M,N],FUN,P1,P2…)
函数blkproc的参量为一幅输入图像A将被处理的块的大小[M,N],用于处理这些块的函数FUN,以及块处理函数FUN的一些可选输入参数P1,P2,并重新将结果组合到输出图像。
程序流图
对一幅图像进行DCT压缩编码的MATLAB程序流程图如图所示:
图图像DCT压缩编码的程序流程图
程序代码
I=imread('E:
\ProgramFiles\MATLAB\R2010b\bin\lena','bmp');
I=im2double(I);
T=dctmtx(8);%8*8的离散余弦变换矩阵
B=blkproc(I,[8,8],'P1*x*P2',T,T');%对原图像进行DCT变换blkproc()函数是对f1矩阵中的%每个[8,8]模块,用公式‘P1*x*P2’进行计算。
其中x=[8,8],P1=T,P2=T'。
用*表示的是%矩阵乘法,而.*表示的矩阵中相应数的乘积。
由线性代数的知识,很快就能知道B1的
%size和f1的size是一样的。
mask=[11110000;
11100000;
11000000;
10000000;
00000000;
00000000;
00000000;
00000000;
];
B2=blkproc(B,[88],'P1.*x',mask);%数据压缩,只保留DCT系数矩阵最左上角的10个系数
I2=blkproc(B2,[88],'P1*x*P2',T',T);%进行DCT反变换,得到压缩后的图像
subplot(2,2,1);imshow(I);title('原图像');
subplot(2,2,2);imshow(I2);title('重构后图像');
subplot(2,2,3);imshow(abs(I-I2));title('原图象和复原后图象的差')
subplot(2,2,4);imshow(B);title('DCT系数');
MATLAB仿真
经过MATLAB软件进行仿真,仿真结果如图所示:
图原图像和重构后图像比较,及DCT系数
总结分析:
仿真中取了10个DCT系数,占15%.比较原图和重构图像,可以发现:
在抛弃85%的DCT系数后,重构图像时并不会因此而带来其画面质量的显着下降,即重构图像的失真不大。
当然,采用这种方法来实现压缩算法时,可以通过修改mask变量中的DCT系数来更好地比较仿真结果。
4图像的信噪比
原理简介
图像的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,有一种方法可以近似估计图像信噪比,即信号与噪声的方差之比。
首先计算图像所有象素的局部方差,将局部方差的最大值认为是信号方差,最小值是噪声方差,求出它们的比值,再转成dB数,最后用经验公式修正。
数字图像处理中,我们一般用均方误差和峰值信噪比来表示图像压缩效果。
均方误差
均方误差(MeanSquaredError,MSE)
在相同测量条件下进行的测量称为等精度测量,例如在同样的条件下用同一个游标卡尺测量铜棒的直径若干次这就是等精度测量。
对于等精度测量来说还有一种更好的表示误差的方法就是标准误差。
标准误差定义为各测量值误差的平方和的平均值的平方根故又称为均方误差。
数理统计中均方误差是指参数估计值与参数真值之差平方的期望值记为MSE。
峰值信噪比
峰值信噪比,其英文缩写是PSNR,英文全称为“PeakSignaltoNoiseRatio”。
peak的中文意思是顶点。
而radio的意思是比率或比列的。
整个意思就是到达噪音比率的顶点信号,psnr是一般是用于最大值信号和背景噪音之间的一个工程项目。
通常在经过影像压缩之后,输出的影像通常都会有某种程度与原始影像一样。
为了衡量经过处理后的影像品质,我们通常会参考PSNR值来认定某个处理程序够不够令人满意。
峰值信噪比定义为:
Peak就是指8bits表示法的最大值255。
MSE指MeanSquareError(均方误差各值相差的n次方和的平均值的n次平方根(这几个字应该没有)),I(角标n)指原始影像第n个pixel值,P(角标n)指经处理后的影像第n个pixel值。
PSNR的单位为dB。
所以PSNR值越大,就代表失真越少。
PSNR是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR的分数无法和人眼看到的视觉品质完全一致,有可能PSNR较高者看起来反而比PSNR较低者差,这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化例如人眼对空间频率较低的对比差异敏感度较高人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响。
程序设计
程序函数:
functionPSNR=PSNR(A,B)
%计算输入两图像A,B的峰值信噪比PSNR(dB)
A=double(A);%图像数据类型转换
B=double(B);
[Row,Col]=size(A);%输入图像的大小
[Row,Col]=size(B);
MSE=sum(sum((A-B).^2))/(Row*Col);%均方误差MSE
PSNR=10*log10(255^2/MSE);%峰值信噪比PSNR(dB)
functionMSE=MSE(A,B)
A=double(A);
B=double(B);
[Row,Col]=size(A);%输入图像的大小
[Row,Col]=size(B);
MSE=sum(sum((A-B).^2))/(Row*Col);%均方误差MSE
主程序代码:
disp('DCTJPEG压缩前后均方误差MSE:
')
mse0=mse(I,I2)
disp('DCTJPEG压缩前后图像峰值信噪比(dB):
')
PSNR0=PSNR(I,I2)
MATLAB仿真
经过MATLAB软件进行仿真,仿真结果如图所示:
图均方误差及峰值信噪比
5心得体会
这次的课程设计,让我对单MATLAB的理论有了更加深入的了解,同时在具体的制作过程中,我们发现现在书本上的知识与实际的应用存在着不小的差距。
这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实践。
在整个运用MATLAB影像处理工具箱中的相关函数和命令来实现图像熵的计算、基于DCT的图像压缩编码理论算法、变换前后图像峰值信噪比的计算的仿真过程中,我对图像变换编码程序设计的方法更加清晰了。
仿真结果较好地反映出DCT图像压缩的特性及无可比拟的优势。
图像DCT变换是目前最佳的图像变换,它有很多优点:
DCT是正交变换,它可以将8×8图像的空间表达式转换为频率域,只需要用少量的数据点表示图像;DCT产生的系数很容易被量化,因此能获得好的块压缩;DCT算法的性能很好,它有快速算法,因此它在硬件和软件中都容易实现;而且DCT算法是对称的,所以利用逆DCT算法可以用来解压缩图像。
这次设计过程中,遇到了很多的问题,MATLAB软件是一个很强大的软件,虽然在平时实验课时经常使用它,但是,对于很多函数以及MATLAB使用的一些细节,我掌握的并不熟练,所以在设计过程中,我不得不经常借助于参考书和网络查阅各种资料。
所以,通过这次设计,我知道了如何运用已掌握的知识,如何学习新的知识,如何去克服遇到的困难。
还有怎样合理地安排时间,有效地查阅资料甄选重点的知识。
所以的这些都是此次课程设计留给我的宝贵财富。
参考文献
[1]杨杰.数字图像处理及MATLAB实现.北京:
电子工业出版社,2009
[2]李弼程.智能图像处理技术.北京:
电子工业出版社,2004
[3]李秀敏基于MATLAB的DCT变换JPEG图像压缩中的应用.光电与控制,2005
[4]陈桂明等.应用MATLAB语言处理数字信号与数字图像.北京:
科学出版社,2001
[5]董长虹.MATLAB信号处理与应用.北京:
国防工业出版社,2005
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 变换 编码 程序设计