实验一:数字图像基本操作及灰度调整
1.实验目的
1) 2) 3) 4)
掌握读、写图像的基本方法。
掌握MATLAB 语言中图像数据与信息的读取方法。 理解图像灰度变换处理在图像增强的作用。
掌握绘制灰度直方图的方法,理解灰度直方图的灰度变换及均衡化的方法。
2. 实验原理
1. 灰度变换
灰度变换是图像增强的一种重要手段,它常用于改变图象的灰度范围及分布,是图象数字化及图象显示的重要工具。
图像反转
灰度级范围为[0, L-1]的图像反转可由下式获得
s =L -1-r
1) 对数运算:有时原图的动态范围太大,超出某些显示设备的允许动态范围,如直接
使用原图,则一部分细节可能丢失。解决的方法是对原图进行灰度压缩,如对数变换:
s = c log(1 + r ) ,c 为常数,r ≥ 0
2) 幂次变换:
s =cr γ, c ≥0, γ≥0
3) 对比拉伸:在实际应用中, 为了突出图像中感兴趣的研究对象,常常要求局部扩展
拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理,即分段线性拉伸:
其对应的数学表达式为:
2. 直方图均衡化
灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频度,它是图像最基本的统计
特征。依据定义,在离散形式下, 用r k 代表离散灰度级,用p r (r k ) 代表p r (r ) ,并且有下式成立:
P r (r k ) =
n k
0≤r k ≤1k =0, 1, 2, , l -1 n
式中:n k 为图像中出现r k 级灰度的像素数,n 是图像像素总数,而n k /n即为频数。 直方图均衡化处理是以累积分布函数变换法为基础的直方图修正法。假定变换函数为
r
s =T (r ) =⎰p r (ω) d ω
(a) Lena图像 (b) Lena图像的直方图
图1.2 Lena图像及直方图
当灰度级是离散值时,可用频数近似代替概率值,即
p r (r k ) =
n k n
0≤r k ≤1k =0, 1, , l -1
式中:l 是灰度级的总数目,p r (r k ) 是取第k 级灰度值的概率,n k 是图像中出现第k 级灰度的次数,n 是图像中像素总数。
所以积分可以表示为下列累计分布函数(cumulative distribution function, CDF)
s k =T (r k ) =∑
j =0
k
n j n
=∑p r (r j )
j =0
k
0≤r j ≤1
k =0, 1, , l -1
3、实验内容与要求
复制若干图形文件(如forest.tif 和b747.jpg )至MATLAB 目录下work 文件夹中。 1. 熟悉MATLAB 语言中对图像数据读取,显示等基本函数
特别需要熟悉下列命令:熟悉imread()函数、imwrite()函数、size()函数、Subplot ()函数、Figure ()函数。
1) 将MA TLAB 目录下work 文件夹中的forest.tif 图像文件读出. 用到imread ,imfinfo 等文件,观察一下图像数据,了解一下数字图像在MATLAB 中的处理就是处理一个矩阵。将这个图像显示出来(用imshow )。尝试修改map 颜色矩阵的值,再将图像显示出来,观察图像颜色的变化。
2) 将MA TLAB 目录下work 文件夹中的b747.jpg 图像文件读出,用rgb2gray()将其 转化为灰度图像,记为变量B 。
2. 图像灰度变换处理在图像增强的作用
读入不同情况的图像,请自己编程和调用Matlab 函数用常用灰度变换函数对输入图像进行灰度变换,比较相应的处理效果。
3. 绘制图像灰度直方图的方法,对图像进行均衡化处理 请自己编程和调用Matlab 函数完成如下实验。
1) 显示B 的图像及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust 函 数将它的灰度值调整到[0,1]之间,并观察调整后的图像与原图像的差别,调整后的灰度直方图与原灰度直方图的区别。
2) 对B 进行直方图均衡化处理,试比较与源图的异同。
3) 对B 进行如图所示的分段线形变换处理,试比较与直方图均衡化处理的异同。
图1.1 分段线性变换函数
4. 实验具体实现
1. 熟悉MATLAB 语言中对图像数据读取,显示等基本函数 1) 文件读取与信息显示:
load trees;
[X,map]=imread('forest.tif'); subimage(X,map); I=imread('forest.tif'); imshow(I);
imfinfo('forest.tif');
ans =
Filename:
'F:\MATLAB\R2007a\toolbox\images\imdemos\forest.tif' FileModDate: '04-Dec-2000 13:57:58' FileSize: 124888 Format: 'tif' FormatVersion: [] Width: 447 Height: 301 BitDepth: 8
ColorType: 'indexed' FormatSignature: [73 73 42 0] ByteOrder: 'little-endian' NewSubFileType: 0 BitsPerSample: 8
Compression: 'PackBits' PhotometricInterpretation: 'RGB Palette' StripOffsets: [17x1 double] SamplesPerPixel: 1 RowsPerStrip: 18
StripByteCounts: [17x1 double] XResolution: 72 YResolution: 72 ResolutionUnit: 'Inch'
Colormap: [256x3 double] PlanarConfiguration: 'Chunky' TileWidth: [] TileLength: [] TileOffsets: [] TileByteCounts: [] Orientation: 1 FillOrder: 1
GrayResponseUnit: 0.0100 MaxSampleValue: 255
MinSampleValue: 0 Thresholding: 1 ImageDescription: 'Carmanah Ancient Forest, British Columbia, Canada'
2)
map 颜色矩阵的修改
[X,map]=imread('forest.tif'); map1=map+map; subimage(X,map1);
新的颜色矩阵值变成原文件的2倍,图像明显变亮,颜色的R 、G 、B 值增强。
3) 灰度图像的转化
RGB=imread('b747.jpg'); B=rgb2gray(RGB);
2. 图像灰度变换处理在图像增强的作用
g1=imadjust(B,[0 1],[1 0]); g2=imcomplement(g1);
g3=im2uint8(mat2gray(log(1+double(B))));
图中对图像文件进行了基本的灰度变换,包括用式s = L – 1 – r 得到的图像反转,对反转图像的求补,以及对数变换的采用。
3. 绘制图像灰度
直方图的方法,对图像进行均衡化处理
图像灰度直方图的显示与灰度调整 imhist(B);
J = imadjust(B,[],[0 1]); imhist(J); subimage(J);
在原始图像中,直方图的组成成分集中在高灰度等级(亮)一侧,且图像灰度范围为[0,1],故将灰度值调整到[0,1]间后直方图无明显变化。类似的,将灰度值调整到[0,0.5]时,整个图像变暗,直方图横向压缩1倍。
对B 进行直方图均衡化处理,试比较与原图的异同。
I = imread('pout.tif');
[J,T] = histeq(I);
figure,plot((0:255)/255,T);
原图像中目标物的灰度主要集中于高亮度部分,而且象素总数较多,所占的灰度等级
较少。经过直方图均衡后,目标物的所占的灰度等级得到扩展,对比度加强,使整个图像得到增强。
数字图像均衡化后,其直方图并非完全均匀分布,这是因为图像的象素个数和灰度等
级均为离散值,而且均衡化使灰度级并归。因此,均衡化后,其直方图并非完全均匀分布。
1)
对B 进行如图所示的分段线形变换处理,试比较与直方图均衡化处理的异同。
x1=0:0.01:0.125; x2=0.125:0.01:0.75; x3=0.75:0.01:1; y1=2*x1;
y2=0.25+0.6*(x2-0.125); y3=0.625+1.5*(x3-0.75); x=[x1,x2,x3]; y=[y1,y2,y3]; %subplot(2,2,4); plot(x,y);
1. 通过在所关心范围内为所有灰度值指定一个较高值,而为其他灰度指定一个较低
值,或将所需范围变亮,分段线性变换可提高图像中特定灰度范围的亮度,常用于图像特征值的提取。
2. 这里将原始图像位于[0.125,0.75]间的灰度值调低,放大其余的灰度值,突出显示图
像低频域和高频域的部分。
实验二:数字图像的空间域滤波和频域滤波
1.实验目的
1. 掌握图像滤波的基本定义及目的。 2. 理解空间域滤波的基本原理及方法。 3. 掌握进行图像的空域滤波的方法。 4. 掌握傅立叶变换及逆变换的基本原理方法。 5. 理解频域滤波的基本原理及方法。 6. 掌握进行图像的频域滤波的方法。
2.实验基本原理
1. 空间域增强
空间域滤波是在图像空间中借助模板对图像进行领域操作,处理图像每一个像素的取值都是根据模板对输入像素相应领域内的像素值进行计算得到的。空域滤波基本上是让图像在频域空间内某个范围的分量受到抑制,同时保证其他分量不变,从而改变输出图像的频率分布,达到增强图像的目的。
空域滤波一般分为线性滤波和非线性滤波两类。线性滤波器的设计常基于对傅立叶变换 的分析,非线性空域滤波器则一般直接对领域进行操作。各种空域滤波器根据功能主要分为 平滑滤波器和锐化滤波器。平滑可用低通来实现,平滑的目的可分为两类:一类是模糊,目 的是在提取较大的目标前去除太小的细节或将目标内的小肩端连接起来;另一类是消除噪 声。锐化可用高通滤波来实现,锐化的目的是为了增强被模糊的细节。结合这两种分类方法, 可将空间滤波增强分为四类:
线性平滑滤波器(低通) 非线性平滑滤波器(低通) 线性锐化滤波器(高通) 非线性锐化滤波器(高通)
空间滤波器都是基于模板卷积,其主要工作步骤是:
1) 将模板在图中移动,并将模板中心与图中某个像素位置重合; 2) 将模板上的系数与模板下对应的像素相乘; 3) 将所有乘积相加;
4) 将和(模板的输出响应)赋给图中对应模板中心位置的像素。 2. 平滑滤波器 1) 线性平滑滤波器
线性低通平滑滤波器也称为均值滤波器,这种滤波器的所有系数都是正数,对3×3 的模板来说,最简单的是取所有系数为1,为了保持输出图像任然在原来图像的灰度值范围 内,模板与象素邻域的乘积都要除以9。
MATLAB 提供了fspecial 函数生成滤波时所用的模板,并提供filter2 函数用指定的滤 波器模板对图像进行运算。函数fspecial 的语法格式为: h=fspecial(type);
h=fspecial(type,parameters);
其中参数type 指定滤波器的种类,parameters 是与滤波器种类有关的具体参数。
表2.1 MATLAB中预定义的滤波器种类
MATLAB 提供了一个函数imnoise 来给图像增添噪声,其语法格式为:
J=imnoise(I,type);
J=imnoise(I,type,parameters);
参数type 指定噪声的种类,parameters 是与噪声种类有关的具体参数。参数的种类见 表2.2。
表2.2 噪声种类及参数说明
2) 非线性平滑滤波器
中值滤波器是一种常用的非线性平滑滤波器,其滤波原理与均值滤波器方法类似,但计 算的非加权求和,而是把领域中的图像的象素按灰度级进行排序,然后选择改组的中间值作为输出象素值。
MATLAB 提供了medfilt2 函数来实现中值滤波,其语法格式为:
B=medfilt2(A,[m n]); B=medfilt2(A);
其中,A 是原图象,B 是中值滤波后输出的图像。[m n]指定滤波模板的大小,默认模 板为3×3。
3. 锐化滤波器
图像平滑往往使图像中的边界、轮廓变得模糊,为了减少这类不利效果的影响,需要利 用图像锐化技术,使图像的边缘变得清晰。
1) 线性锐化滤波器
线性高通滤波器是最常用的线性锐化滤波器。这种滤波器的中心系数都是正的,而周围 的系数都是负的,所有的系数之和为0。
对3×3 的模板来说,典型的系数取值为:
[-1 -1 -1; -1 8 -1; -1 -1 -1]
事实上这是拉普拉斯算子。语句h=-fspecial(‘laplacian ’,0.5) 得到的拉普拉斯算子为:
h =-0.3333 -0.3333 -0.3333
-0.3333 2.6667 -0.3333 -0.3333 -0.3333 -0.3333 2) 非线性锐化滤波
邻域平均可以模糊图像,因为平均对应积分,所以利用微分可以锐化图像。图像处理中 最常用的微分方法是利用梯度。常用的空域非线性锐化滤波微分算子有sobel 算子、prewitt 算子、log 算子等。
4. 频域增强
频域增强是利用图像变换方法将原来的图像空间中的图像以某种形式转换到其他空间 中,然后利用该空间的特有性质方便地进行图像处理,最后再转换回原来的图像空间中,从 而得到处理后的图像。
频域增强的主要步骤是:
选择变换方法,将输入图像变换到频域空间。
在频域空间中,根据处理目的设计一个转移函数,并进行处理。 将所得结果用反变换得到增强的图像。
常用的频域增强方法有低通滤波和高通滤波。 5. 低通滤波
图像的能量大部分集中在幅度谱的低频和中频部分,而图像的边缘和噪声对应于高频部 分。因此能降低高频成分幅度的滤波器就能减弱噪声的影响。由卷积定理,在频域实现低通 滤波的数学表达式:
G (u , v ) =H (u , v ) F (u , v )
1) 理想低通滤波器(ILPF )
2) 巴特沃斯低通滤波器(BLPF )
3) 指数型低通滤波器(ELPF )
6. 高通滤波
由于图像中的细节部分与其高频分量相对应,所以高通滤波可以对图像进行锐化处理。高通滤波与低通滤波相反,它是高频分量顺利通过,使低频分量受到削弱。高通滤波器和低通滤波器相似,其转移函数分别为:
1) 理想高通滤波器(IHPF )
2) 巴特沃斯高通滤波器(BLPF )
3) 指数型高通滤波器(ELPF )
图像经过高通滤波处理后,会丢失许多低频信息,所以图像的平滑区基本上会消失。所 以,可以采用高频加强滤波来弥补。高频加强滤波就是在设计滤波传递函数时,加上一 个大于0小于1的常数c ,即:
H ′(u , v ) =H (u , v ) +c
3.实验内容与要求
1. 平滑空间滤波:
1) 读出eight.tif 这幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图 显示在同一图像窗口中。
2) 对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果, 要求在同一窗口中显示。
3) 使用函数imfilter 时,分别采用不同的填充方法(或边界选项,如零填 充、’replicate ’、’symmetric ’、’circular ’)进行低通滤波,显示处理后的图像。
4) 运用for 循环,将加有椒盐噪声的图像进行10次,20次均值滤波,查看其特点, 显 示均值处理后的图像(提示:利用fspecial 函数的’average’类型生成均值滤波器)。
5) 对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处 理,要求在同一窗口中显示结果。
6) 自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。 2. 锐化空间滤波
1) 读出blurry_moon.tif这幅图像,采用3×3的拉普拉斯算子w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1]对其进行滤波。
2) 编写函数w = genlaplacian(n),自动产生任一奇数尺寸n 的拉普拉斯算子,如5×5 的拉普拉斯算子
w = [ 1 1 1 1 1 1 1 1 1 1 1 1 -24 1 1 1 1 1 1 1 1 1 1 1 1]
3) 分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对blurry_moon.tif进
行锐化滤波,并利用式g (x , y ) =f (x , y ) -∇f (x , y ) 完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。
4) 采用不同的梯度算子对blurry_moon.tif进行锐化滤波,并比较其效果。
5) 自己设计锐化空间滤波器,并将其对噪声图像进行处理,显示处理后的图像;
2
3. 傅立叶变换
1) 读出woman.tif 这幅图像,对其进行快速傅立叶变换,分别显示其幅度图像和相位 图像。
仅对相位部分进行傅立叶反变换后查看结果图像。
2) 仅对幅度部分进行傅立叶反变换后查看结果图像。 3) 将图像的傅立叶变换F 置为其共轭后进行反变换,比较新生成图像与原始图像的差 异。
4. 平滑频域滤波
1) 设计理想低通滤波器、巴特沃斯低通滤波器和高斯低通滤波器,截至频率自选,分 别给出各种滤波器的透视图。
2) 读出test_pattern.tif这幅图像,分别采用理想低通滤波器、巴特沃斯低通滤波器和高 斯低通滤波器对其进行滤波(截至频率自选),再做反变换,观察不同的截止频率下采用不同低通滤波器得到的图像与原图像的区别,特别注意振铃效应。(提示:1)在频率域滤波同样要注意到填充问题;2)注意到(-1)x+y;)
5. 锐化频域滤波
1) 设计理想高通滤波器、巴特沃斯高通滤波器和高斯高通滤波器,截至频率自选,分 别给出各种滤波器的透视图。
2) 读出test_pattern.tif这幅图像,分别采用理想高通滤波器、巴特沃斯高通滤波器和高 斯高通滤波器对其进行滤波(截至频率自选),再做反变换,观察不同的截止频率下采用不同高通滤波器得到的图像与原图像的区别。
4. 实验具体实现
1. 平滑空间滤波:
1) 读出eight.tif 这幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图
显示在同一图像窗口中。
I=imread('eight.tif');
imshow(I);
J = imnoise(I,'salt & pepper',0.05); %noise density=0.05 K= imnoise(I,'gaussian',0.01,0.01);
图2.1 初始图像及椒盐噪声图像、高斯噪声污染图
2) 对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,
要求在同一窗口中显示。
H = fspecial('sobel');
Sobel = imfilter(I,H,'replicate'); H = fspecial('laplacian',0.4); lap = imfilter(I,H,'replicate'); H = fspecial('gaussian',[3 3],0.5); gaussian = imfilter(I,H,'replicate');
图2.2 原图像及各类低通滤波处理图像
3) 使用函数imfilter 时,分别采用不同的填充方法(或边界选项,如零填
充、’replicate ’、’symmetric ’、’circular ’)进行低通滤波,显示处理后的图像。
originalRGB = imread('peppers.png');
h = fspecial('motion', 50, 45); %motion blurred filteredRGB = imfilter(originalRGB, h);
boundaryReplicateRGB = imfilter(originalRGB, h, 'replicate'); boundary0RGB = imfilter(originalRGB, h, 'x'); boundary0RGB = imfilter(originalRGB, h, 0);
boundarysymmetricRGB = imfilter(originalRGB, h, 'symmetric'); boundarycircularRGB = imfilter(originalRGB, h, 'circular');
图2.3 原图像及运动模糊图像
图2.4 函数imfilter 各填充方式处理图像
4) 运用for 循环,将加有椒盐噪声的图像进行10次,20次均值滤波,查看其特点, 显
示均值处理后的图像。
J = imnoise(I,'salt & pepper',0.05);
h=fspecial('average'); %Averaging Filtering J1=imfilter(J,h); for i=1:10 J1=imfilter(J,h); end for i=1:20 J2=imfilter(J,h);
图2.5 椒盐噪声污染图像经10次、20次均值滤波图像
由图2.5可得,20次滤波后的效果明显好于10次滤波,但模糊程度也更强。
5) 对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处
理,要求在同一窗口中显示结果。
h=fspecial('average'); %Averaging Filtering J1=imfilter(J,h);
J2=medfilt2(J);
%Median Filtering
图2.6 椒盐噪声污染图像及均值、中值滤波图像
从图2.6中可以看出,对于椒盐噪声污染的图像处理,中值滤波效果要明显好于均值滤波。经均值滤波器处理后的图像比均值滤波器中结果图像更加模糊。
6) 设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。
domain=[0 0 8 0 0; 0 0 8 0 0; 8 8 8 8 8; 0 0 8 0 0; 0 0 8 0 0]; K1= ordfilt2(J,5,domain);
图2.7 椒盐噪声污染图像及5*5平滑滤波器掩模
掩模值为
w=1/25*[1 1 1 1 1;1 1 1 1 1;1 1 1 1 1;1 1 1 1 1;1 1 1 1 1]
图2.8 椒盐噪声污染图像及5*5平滑滤波器掩模
掩模值为w= [0 0 8 0 0;0 0 8 0 0;8 8 8 8 8; 0 0 8 0 0;0 0 8 0 0]
2. 锐化空间滤波
1) 采用
3×3的拉普拉斯算子w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1]滤波
I=imread('blurry_moon.tif'); T=double(I);
subplot(1,2,1),imshow(T,[]);title('Original Image'); w =[1,1,1; 1,-8,1; 1,1,1];
K=conv2(T,w,'same');
图2.9 初始图像与拉普拉斯算子锐化图像
2) 编写函数w = genlaplacian(n),自动产生任一奇数尺寸n 的拉普拉斯算子,如5×5的拉
普拉斯算子:
w = [ 1 1 1 1 1
1 1 1 1 1 1 1 -24 1 1 1 1 1 1 1 1 1 1 1 1]
function w = genlaplacian(n) %Computes the Laplacian operator w = ones(n); x = ceil(n/2);
w(x, x) = -1 * (n * n - 1);
3) 分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对blurry_moon.tif
进行锐
化滤波,并利用式g (x , y ) =f (x , y ) -∇f (x , y ) 完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。
不同尺寸拉普拉斯算子滤波以及图像增强
w1 = genlaplacian(5); I=imread('blurry_moon.tif'); T=double(I);
K=conv2(T,w1,'same'); J=T-K;
2
图2.10 初始图像与不同拉普拉斯算子锐化图像
图像锐化的实质是将原图像与梯度信息叠加,相当于对目标物的边缘进行了增强。
图2.11 拉普拉斯算子锐化与锐化增强图像
4) 采用不同的梯度算子对blurry_moon.tif进行锐化滤波,并比较其效果
[I,map]=imread('blurry_moon.tif'); I=double(I);
[Gx,Gy]=gradient(I); % gradient calculation G=sqrt(Gx.*Gx+Gy.*Gy); % matrix
J1=G; % gradient1 imshow(J1,map);
J2=I; % gradient2 K=find(G>=7); J2(K)=G(K); imshow(J2,map);
J3=I; % gradient3 K=find(G>=7); J3(K)=255; imshow(J3,map);
J4=I; % gradient4 K=find(G
J5=I; % gradient5 K=find(G=7); J5(Q)=255; imshow(J5,map);
图2.12 原始图像与不同梯度子锐化图像
作为二阶微分算子,拉普拉斯变换在图像细节的增强处理上有明显的优点,但会产生更多的噪声。梯度变换在灰度变化区域的响应更强,但对噪声和细节的响应比拉普拉斯变换弱。
5) 自己设计锐化空间滤波器,并将其对噪声图像进行处理,显示处理后的图像;
图2.13 原始图像与不同边缘锐化图像
3. 傅立叶变换
1) 读出woman.tif 这幅图像,对其进行快速傅立叶变换,分别显示其幅度图像和相位图像。
domain=[8 8 0 8 8; 8 8 0 8 8; 0 0 0 0 0; 8 8 0 8 8; 8 8 0 8 8]; K1= ordfilt2(J,5,domain);
F=imread('woman.tif'); F1=fft2(F);
F2=log(1+abs(F1)); %amplitude spectrum F3=fftshift(F1);
imshow(log(1+abs(F3)),[]);
F4=angle(F1); %phase spectrum
图2.14 原始图像与快速傅立叶变换图像
2)
仅对相位部分进行傅立叶反变换后查看结果图像。
F1=fft2(F); i=sqrt(-1);
f2=ifft2(exp(i*angle(F1))); imshow(real(f2),[]);
图2.15 原始图像与对全部信息进行傅立叶逆变换结果
图2.16 仅对相位信息进行傅立叶逆变换结果
相位谱决定了图像信号中各频率分量的位置。
实验三、图像压缩
一.实验目的
1. 理解有损压缩和无损压缩的概念;
2. 理解图像压缩的主要原则和目的;
3. 了解几种常用的图像压缩编码方式。
4. 利用MATLAB 程序进行图像压缩。
二.实验原理
1. 图像压缩原理
图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。
信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。
编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。
(1). 冗余度压缩方法,也称无损压缩、信息保持编码或嫡编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。
(2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。
应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类:
(1)无损压缩编码种类
哈夫曼(Huffman )编码,算术编码,行程(RLE )编码,Lempel zev编码。
(2)有损压缩编码种类
预测编码,DPCM ,运动补偿;
频率域方法:正交变换编码(如DCT) ,子带编码;
空间域方法:统计分块编码;
模型方法:分形编码,模型基编码;
基于重要性:滤波,子采样,比特分配,向量量化;
(3)混合编码。
有JBIG ,H261,JPEG ,MPEG 等技术标准。
本实验主要利用MA TLAB 程序进行离散余弦变换(DCT )压缩和行程编码(Run Length Encoding , RLE )。
1) 离散余弦变换(DCT)图像压缩原理
离散余弦变换DCT 在图像压缩中具有广泛的应用,它是JPEG 、MPEG 等数据压缩标准的重要数学基础。
和相同图像质量的其他常用文件格式(如GIF(可交换的图像文件格式) ,TIFF(标签图像文件格式) ,PCX(图形文件格式)) 相比,JPEG 是目前静态图像中压缩比最高的。JPEG 比其他几种压缩比要高得多,而图像质量都差不多(JPEG处理的图像只有真彩图和灰度图) 。正是由于其高压缩比,使得JPEG 被广泛地应用于多媒体和网络程序中。JPEG 有几种模式,其中最常用的是基于DCT 变换的顺序型模式,又称为基本系统(Baseline)。
用DCT 压缩图像的过程为:
(1)首先将输入图像分解为8×8或16×16的块,然后对每个子块进行二维DCT 变换。
(2)将变换后得到的量化的DCT 系数进行编码和传送,形成压缩后的图像格 式。
用DCT 解压的过程为:
(1)对每个8×8或16×16块进行二维DCT 反变换。
(2)将反变换的矩阵的块合成一个单一的图像。
余弦变换具有把高度相关数据能量集中的趋势,DCT 变换后矩阵的能量集中在矩阵的左上角,右下的大多数的DCT 系数值非常接近于0。对于通常的图像来说,舍弃这些接近于0的DCT 的系数值,并不会对重构图像的画面质量带来显著的下降。所以,利用DCT 变换进行图像压缩可以节约大量的存储空间。压缩应该在最合理地近似原图像的情况下使用最少的系数。使用系数的多少也决定了压缩比的大小。
在压缩过程的第2步中,可以合理地舍弃一些系数,从而得到压缩的目的。在压缩过程的第2步,还可以采用Huffman 编码来进一步压缩。
三.实验程序与结果
8*8:
I=imread('L:/lena.jpg');
K=rgb2gray(I);
I=im2double(K);
imshow(I);
T=dctmtx(8);
B=blkproc(I,[8 8],'P1*x*P2',T,T');
mask=[1 1 1 1 0 0 0 0
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 ];
B2=blkproc(B,[8 8],'P1.*x',mask);
I2=blkproc(B2,[8 8],'P1*x*P2',T',T);
I=imread('L:/lena.jpg');
subplot(2,2,1);
imshow(I);
title(' 原始图像' );
subplot(2,2,2);
imshow(K);
title(' 灰度图' );
subplot(2,2,3);
imshow(B2);
title(' 压缩图' );
subplot(2,2,4);
imshow(I2);
title(' 复原图' );
16*16:
I=imread('L:/lena.jpg');
K=rgb2gray(I);
I=im2double(K);
imshow(I);
T=dctmtx(16);
B=blkproc(I,[16 16],'P1*x*P2',T,T');
mask=[1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
B2=blkproc(B,[16 16],'P1.*x',mask);
I2=blkproc(B2,[16 16],'P1*x*P2',T',T);
I=imread('L:/lena.jpg');
subplot(2,2,1),imshow(I);title(' 原始图像' );
subplot(2,2,2),imshow(K);title(' 灰度图' );
subplot(2,2,3),imshow(B2);title(' 压缩图' );
subplot(2,2,4), imshow(I2);title(' 复原图' );
实验结果分析: 由结果截图可看出,分为8*8块编码后的图像相对于分为16*16块编码后的图像更清晰,这是由于分为16*16块后的压缩比变大,图像的失真增加,但两种编码后的图像相对于原图像都稍显模糊, 压缩后图像稍有失真。