1.简述
一、设计任务
1、在图像的变换和压缩中,常常用到离散余弦变换(DCT)。DCT变换用于图像的压缩实例。请在测试图像中验证你的结论。
2、请编程实现图像的真彩色增强。
3、通过直方图均衡化的方法实现图像的灰度变换,在测试图像中验证你的结论,分析程序结果。
4、使用常用的滤波器对数字图像进行处理。如均值滤波器、中值滤波器、维纳滤波器等。
二、系统设计原理
1、DCT图像压缩原理
DCT变换是最小均方误差条件下得出的次最佳正交变换,且已获得广泛应用,并成为许多图像编码国际标准的核心。JPEG图像格式的压缩算法采用的就是DCT变换,DCT变换的变换核为余弦函数,计算速度较快,有利于图像压缩和其他处理。在编码过程中,JPEG算法首先将RGB分量转化为亮分量和色差分量,然后将图像分解为8*8的像素块,,对这个8*8块进行二维离散余弦变换,每个块就产生了64个DCT系数,其中一个是直流(DC),它表示了8*8输入矩阵全部值的平均数,其余63个系数为交流(AC)系数,接下来对DCT系数进行量化,最后将量化的DCT系数进行编码,就形成了压缩后的图像格式。在解码过程中,先对已编码的量化的系数进行解码,然后求逆量化并利用二维DCT反变换把DCT系数转化为8*8样本像块,最将反变换后的块组合成一幅图像。这样就完成了图像的压缩和解压过程。
离散余弦变换DCT的MATLAB实现有两种方 法,一种是基于FFR的快速算法,这是通过MATLAB工具箱提供的DCT2函数实现的;另一种是DCT变换是矩阵方法。变换矩阵方法非常适合做8*8或16 *16的图像块的DCT变换,工具箱提供了dctmtx函数来计算变换矩阵。
2、真彩色增强
真彩色增强主要是针对伪彩色增强而言的。图像的色彩增强技术主要分为为彩色增强和真彩色增强两种,这两种方法在原理上存在着本质的区别。伪彩色增强时对原灰度图像中不同灰度值区域分别付于不同的颜色,使人能够更明白的区分不同的灰度级。由于原始图像事实上是没有颜色的,所以称这种人工赋予的颜色为伪彩色,伪彩色增强实质上只是一个图像的着色过程是一种灰度到彩色的映射技术。真彩色增强则是对原始图像本身具有的颜色进行调节,是一个彩色到彩色的映射过程。
3、平滑
在图像中,通过相邻点的相互平均可以去掉一些突然变化的点,从而滤掉一定的噪声,达到平滑的目的,使图片看起来更柔和,颜色更均匀更清晰。
4、锐化
图像平滑往往使图像中的边界、轮廓变得模糊,为了减少这类不利效果的影响,需要用图像锐化技术使图像的边缘变的清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变的清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。在水下图像的增强处理中除了去噪,对比度扩展外,有时候还需要加强图像中景物的边缘和轮廓。而边缘和轮廓常常位于图像中灰度突变的地方,因而可以直观地想到用灰度的差分对边缘和轮廓进行提取。
5、灰度变换(直方图均衡化)
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):
(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。
6、图像滤波
滤波器是一种选频装置可以使信号中特定的频率成分通过而极大地衰减其它频率成分,可以滤除干扰噪声。在数字图像处理中,常常会遇到图像中混杂有许多的噪声。因此,在进行图像处理中,有时要先进行祛除噪声的工作。最常用的祛除噪声的方法是用滤波器进行滤波处理。MATLAB的图像处理工具箱里也设计了许多的滤波器。如均值滤波器、中值滤波器、维纳滤波器等。
7、维纳滤波器
维纳滤波器(Wiener filter)是由数学家维纳(Rorbert Wiener)提出的一种以最小平方为最优准则的线性滤波器。在一定的约束条件下,其输出与一给定函数(通常称为期望输出)的差的平方达到最小,通过数学运算最终可变为一个托布利兹方程的求解问题。维纳滤波器又被称为最小二乘滤波器或最小平方滤波器,目前是基本的滤波方法之一。维纳滤波是利用平稳随机过程的相关特性和频谱特性对混有噪声的信号进行滤波的方法。
8、中值滤波器
中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。 中值滤波是图像处理中的一个常用步骤,它对于斑点噪声(en:speckle noise)和椒盐噪声(en:salt-and-pepper noise)来说尤其有用。保存边缘的特性使它在不希望出现边缘模糊的场合也很有用。
2.代码
%----------------------------------------------------------
%% DCT图像压缩matlab
%----------------------------------------------------------
clear all
clc
k=4;
X=imread('girl.bmp'); %打开图像
A=double(X); %将图像转换成double型
B=zeros(size(A));
C=zeros(size(A));
%----------------------------------------------------------
%% 作二维DCT,每一小块为 8×8;
%----------------------------------------------------------
s=size(A);
for m=1:s(1)
if rem(m,8)==0
for n=1:s(2)
if rem(n,8)==0
B((m-8+1):m,(n-8+1):n)=dct2(A((m-8+1):m,(n-8+1):n));
B((m-k+1):m,(n-8+1):n)=0;
B((m-8+1):m,(n-k+1):n)=0;
end
end
end
end
%----------------------------------------------------------
%% 逆DCT,图象重建
%----------------------------------------------------------
for m=1:128
if rem(m,8)==0
for n=1:128
if rem(n,8)==0
C((m-8+1):m,(n-8+1):n)=idct2(B((m-8+1):m,(n-8+1):n));
end
end
end
end
%----------------------------------------------------------
%% 输出二维图像;
%----------------------------------------------------------
C=uint8(C);
subplot(1,2,1);
subimage(X);
axis square;xlabel('原图像')
subplot(1,2,2);
subimage(C);
axis square;xlabel('压缩图像');
3.运行结果
4.参考文献
[1] 胡晓军、 徐飞 .MATLAB应用图像处理(第二版).西安电子科技大学出版