图像变换编码程序设计文档格式.docx
《图像变换编码程序设计文档格式.docx》由会员分享,可在线阅读,更多相关《图像变换编码程序设计文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
(4)利用JPEG的压缩原理,将图像分成8?
8的图像块,计算每个块的DCT系数;
(5)只保留DCT系数矩阵最左上角的10个系数,然后对每个图像块利用这10个系数进行DCT反变换来重构图像,显示重构后的图像;
(5)计算该图像经过离散余弦变换编码及重构后图像的信噪比;
(6)要求阅读相关参考文献不少于5篇;
(7)根据课程设计有关规范,按时、独立完成课程设计说明书。
2图像的信息熵
2.1信息熵与图像熵
自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。
所发出的消息不同,它们所含有的信息量也就不同。
任何一个消息的自信息量都代表不了信源所包含的平均自信息量。
不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量。
信息熵的意义:
信源的信息熵H是从整个信源的统计特性来考虑的。
它是从平均意义上来表征信源的总体特性的。
对于某特定的信源,其信息熵只有一个。
不同的信源因统计特性不同,其熵也不同。
图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。
图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令Pi表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为:
图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。
选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为(i,j),其中i表示像素的灰度值(0<
=i<
=255),j表示邻域灰度(0<
=j<
=255),
上式能反应某像素位置上的灰度值与其周围像素灰度分布的综合特征,其中f(i,j)为特征二元组(i,j)出现的频数,N为图像的尺度,定义离散的图像二维熵为:
构造的图像二维熵可以在图像所包含信息量的前提下,突出反映图像中像素位置的灰度信息和像素邻域内灰度分布的综合特征.
2.2图像熵的计算的MTALAB实现
图像熵计算过程:
1)输入一幅图像,并将其转换成灰度图像。
2)统计出图像中每个灰度阶象素概率。
3)统计出图像中相邻两象素的灰度阶联合分布矩阵。
4)根据图像熵和二阶熵公式,计算出一幅图像的熵。
由此,可得图像熵计算的MATLAB程序,如下:
A=imread('
E:
\ProgramFiles\MATLAB\R2010b\bin\lena'
'
bmp'
);
%读入图像
n(1:
256)=0;
p(1:
S=0;
H=0;
fori=1:
256%统计像素值
forj=1:
256
n(A(i,j))=n(A(i,j))+1;
end
end
256%计算每个像素值的概率
p(i)=n(i)/(256*256);
256%概率和为1
S=S+p(i);
256%熵的计算
ifp(i)~=0
H=H+p(i)*log2(1/p(i));
end
H
2.3仿真结果
3基于DCT的JPEG图像压缩编码
3.1关于DCT变换及DCT系数
3.1.1DCT变换
离散余弦变换(DiscreteCosineTransform,DCT)是一种实数域变换,其变换核为实数余弦函数。
对一幅图像进行离散余弦变换后,许多有关图像的重要可视信息都集中在DCT变换的一小部分系数中。
因此,离散余弦变换(DCT)是有损图像压缩JPEG的核心,同时也是所谓“变换域信息隐藏算法”的主要“变换域(DCT域)”之一。
因为图像处理运用二维离散余弦变换,所以直接介绍二维DCT变换。
一个矩阵的二维DCT定义如下:
其中,x,y=0,1,2,…,N-1,式中表示的阵列为N*N。
逆DCT变换定义如下:
,
3.1.2DCT系数的量化
为了达到压缩数据的目的DCT系数需作量化量化表需针对性地设计。
DCT系数量化是一个十分重要的过程,是造成DCT编解码信息损失(或失真)的根源。
量化过程即经过DCT变换图像的每个系数根据量化表除以各自对应的量化步长,得到量化系数。
量化的作用是在一定的主观保真度图像质量的前提下,丢掉那些对视觉影响不大的信息,以获得较高的压缩比。
量化公式:
量化值(u,v)=[f(u,v)/量化矩阵(u,v)]
3.1.3DCT系数的性质
当u,v不断增大时,相应的余弦函数的频率也不断增大,得到的系数可认为就是原始图像信号在频率不断增大的余弦函数上的投影,所以也被称为低频系数、中频系数和高频系数。
而且,一个图像的DCT低频系数分布在DCT系数矩阵的左上角,高频系数分布在右下角,低频系数的绝对值大与高频系数的绝对值。
对DCT变换来说,图像的主要能量是集中在其DCT系数的一小部分。
这所谓的“一小部分”就是指的低频部分。
随着u,v阶数的不断增大,图像信号在两组正交函数上的投影值出现了大量的正负相抵消的情景,从而导致了得到的频率系数在数值(绝对值)上的不断减小。
中、低频系数所含有的原始信号的成份较多,所以由其反变换重构图像就能得到图像的近似部分。
高频系数是在众多正交的余弦函数上投影的加权,是这些不同频率的余弦信号一起来刻画原始信号的结果,图像近似的部分在这些函数上被相互抵消了,剩下的就是图像的细节部分了。
3.2程序设计
3.2.1DCT图像压缩模型
DCT图像压缩模型如图3.1所示:
图3.1DCT图像压缩模型
在编码过程中,将图像分解为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,并重新将结果组合到输出图像。
3.3.2程序流图
对一幅图像进行DCT压缩编码的MATLAB程序流程图如图3.2所示:
图3.2图像DCT压缩编码的程序流程图
3.3.3程序代码
I=imread('
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;
];
B2=blkproc(B,[88],'
P1.*x'
mask);
%数据压缩,只保留DCT系数矩阵最左上角的10个系数
I2=blkproc(B2,[88],'
T'
T);
%进行DCT反变换,得到压缩后的图像
subplot(2,2,1);
imshow(I);
title('
原图像'
subplot(2,2,2);
imshow(I2);
重构后图像'
subplot(2,2,3);
imshow(abs(I-I2));
原图象和复原后图象的差'
)
subplot(2,2,4);
imshow(B);
DCT系数'
3.3MATLAB仿真
经过MATLAB软件进行仿真,仿真结果如图3.3所示:
图3.1原图像和重构后图像比较,及DCT系数
总结分析:
仿真中取了10个DCT系数,占15%.比较原图和重构图像,可以发现:
在抛弃85%的DCT系数后,重构图像时并不会因此而带来其画面质量的显着下降,即重构图像的失真不大。
当然,采用这种方法来实现压缩算法时,可以通过修改mask变量中的DCT系数来更好地比较仿真结果。
4图像的信噪比
4.1原理简介
图像的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,有一种方法可以近似估计图像信噪比,即信号与噪声的方差之比。
首先计算图像所有象素的局部方差,将局部方差的最大值认为是信号方差,最小值是噪声方差,求出它们的比值,再转成dB数,最后用经验公式修正。
数字图像处理中,我们一般用均方误差和峰值信噪比来表示图像压缩效果。
4.1.1均方误差
均方误差(MeanSquaredError,MSE)
在相同测量条件下进行的测量称为等精度测量,例如在同样的条件下用同一个游标卡尺测量铜棒的直径若干次这就是等精度测量。
对于等精度测量来说还有一种更好的表示误差的方法就是标准误差。
标准误差定义为各测量值误差的平方和的平均值的平方根故又称为均方误差。
数理统计中均方误差是指参数估计值与参数真值之差平方的期望值记为MSE。
4.1.2峰值信噪比
峰值信噪比,其英文缩写是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较低者差,这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化例如人眼对空间频率较低的对比差异敏感度较高人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响。
4.2程序设计
程序函数:
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);
%均方误差MSE
主程序代码:
disp('
DCTJPEG压缩前后均方误差MSE:
'
)
mse0=mse(I,I2)
DCTJPEG压缩前后图像峰值信噪比(dB):
PSNR0=PSNR(I,I2)
4.3MATLAB仿真
经过MATLAB软件进行仿真,仿真结果如图4.1所示:
图4.1均方误差及峰值信噪比
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