1、第八章 数字图像处理实验 8.1 数字图像处理基本操作数字图像处理基本操作8.2 图像增强技术实验图像增强技术实验 8.3 图像变换实验图像变换实验 8.4 图像分割实验图像分割实验8.5 图像压缩编码实验图像压缩编码实验 8.6 图像特征提取实验图像特征提取实验 8.1 数字图像处理基本操作数字图像处理基本操作 1、实验目的、实验目的(1)掌握)掌握MATLAB软件的运用,熟练掌握建立、保存、运行、调软件的运用,熟练掌握建立、保存、运行、调试试m文件的方法。文件的方法。(2)了解)了解MATLAB软件中图像处理工具箱的使用方法。软件中图像处理工具箱的使用方法。(3)熟练掌握图像文件(黑白、灰
2、度、索引色和彩色图像)的读熟练掌握图像文件(黑白、灰度、索引色和彩色图像)的读取及显示方法。取及显示方法。(4)熟悉常用的图像文件格式和格式转换。)熟悉常用的图像文件格式和格式转换。2、实验中所用部分函数介绍、实验中所用部分函数介绍(1)imread 功能:图像文件的读取功能:图像文件的读取 格式:格式:A=imread(filename,fmt)将文件命为将文件命为filename表示的扩展名为表示的扩展名为fmt的图像文件读取到矩的图像文件读取到矩阵阵A中。中。MATLAB支持的图像格式有支持的图像格式有bmp、jpg或或jpeg、tif或或tiff、gif、pcx、png、xwd。(2)
3、imwrite 功能:图像文件的写入(保存),把图像写入图形文件中功能:图像文件的写入(保存),把图像写入图形文件中 格式:格式:imwrite(A,filename,fmt);A,filename,fmt意义同上意义同上所述。所述。(3)imshow 功能:显示图像功能:显示图像 格式:格式:imshow(I,n);imshow(I,low high);imshow(BW)%显示黑白图像显示黑白图像 imshow(X,map)%显示索引色图像;显示索引色图像;imshow(RGB)%显示真彩色图像显示真彩色图像 imshow filename(4)figure 功能:创建图形窗口功能:创建图
4、形窗口(5)subplot 功能:将多个图画到一个平面上的工具。功能:将多个图画到一个平面上的工具。格式:格式:subplot(m,n,p)或者)或者subplot(mnp)说明:其中,说明:其中,m表示是图排成表示是图排成m行,行,n表示图排成表示图排成n列,也就列,也就是整个是整个figure中有中有n个图是排成一行的,一共个图是排成一行的,一共m行。行。(6)rgb2ind 功能:将真彩色图像转换成索引色图像功能:将真彩色图像转换成索引色图像 格式格式:X,map=rgb2ind(I,n)说明:说明:I表示被转换的表示被转换的RGB原图像,其中原图像,其中n指定指定map中颜色项数中颜色
5、项数,n最大不能超过最大不能超过65536。(7)ind2rgb 功能:将索引色图像转换成真彩色图像,功能:将索引色图像转换成真彩色图像,格式:格式:RGB=ind2rgb(X,map)说明:说明:X表示被转换的索引色图像,表示被转换的索引色图像,map是是X的调色板。的调色板。MATLAB的实际处理方式是创建一个三维数组,然后将索引色图像的实际处理方式是创建一个三维数组,然后将索引色图像中与颜色对应的中与颜色对应的map值赋值给三维数组。值赋值给三维数组。(8)im2bw 功能:通过设置阈值将功能:通过设置阈值将RGB、索引色、灰度图像转换成二值图像、索引色、灰度图像转换成二值图像 格式格式
6、:BW=im2bw(I,level)说明:参数说明:参数I可以是真彩色图像、灰度图像和索引色图像,当是索可以是真彩色图像、灰度图像和索引色图像,当是索引色图像时,引色图像时,I表示成表示成X,map;level为转换阈值,转换阈值根据图为转换阈值,转换阈值根据图像而不同,可以通过函数像而不同,可以通过函数graythresh()求得。求得。3、实验内容示例部分、实验内容示例部分(1)对二值图像、索引色图像实现读取、显示和保存)对二值图像、索引色图像实现读取、显示和保存 clear,clcclose alli1=imread(circbw.tif);%读取图片读取图片imshow(i1),tit
7、le(黑白图像黑白图像)%显示图片显示图片imwrite(i1,newcircbw.bmp);%保存图片保存图片figure,imshow(newcircbw.bmp);title(newcircbw.bmp)load clownimwrite(X,map,clown.bmp);i2,map=imread(clown.bmp);figure,imshow(i2,map)title(索引色图像索引色图像)imwrite(i2,map,newclown.bmp);figure,imshow(newclown.bmp)title(newclown.bmp)whos i1 i2实验结果如图实验结果如图
8、8.1.1所示及以下数据:所示及以下数据:Name Size Bytes Class i1 280 x272 76160 logical array i2 291x240 69840 uint8 array(a)circbw.tif(b)newcircbw.bmp(c)clown.bmp(d)new clown.bmp(2)在一个图形窗口中显示在一个图形窗口中显示RGB图像图像 clear,clcclose allI=imread(peppers.png);subplot(2,2,1),imshow(I,notruesize),title(真彩色图像)R=I;R(:,:,2 3)=0;%红色分
9、量G=I;G(:,:,1 3)=0;%绿色分量B=I;B(:,:,1 2)=0;%蓝色分量subplot(2,2,2),imshow(R,notruesize);title(显示第一个颜色分量)subplot(2,2,3),imshow(G,notruesize);title(显示第二个颜色分量)subplot(2,2,4),imshow(B,notruesize);title(显示第三个颜色分量)实验结果图如图所示实验结果图如图所示。(a)真彩色图像(b)第一个颜色分量(c)第二个颜色分量(d)第三个颜色分量(3)通过图像点运算增强图像对比度)通过图像点运算增强图像对比度 clear,clc
10、close allI=imread(rice.png);subplot(1,2,1),imshow(I);I1=double(I);J=I1*1.4+40;%点运算增强点运算增强I2=uint8(J);subplot(1,2,2),imshow(I2);实验结果如图所示:实验结果如图所示:(a)原始图像(b)处理后图像 实验结果图(4)实现真彩色图像与索引图像的互相转换。)实现真彩色图像与索引图像的互相转换。clear,clcclose allRGB1=imread(peppers.png);%读入真彩色图像读入真彩色图像X1,map1=rgb2ind(RGB1,128);%真彩色图像转化为索
11、引图像真彩色图像转化为索引图像imshow(X1,map1)%显示索引图像显示索引图像load clown;%载入图像载入图像rgb2=ind2rgb(X,map);%将索引图像转化为真彩色图像将索引图像转化为真彩色图像figure,imshow(rgb2)(a)真彩色图像(b)转换成的索引色图像(c)索引色图像(d)转换成的真彩色图像(5)图像相加是即将大小相等的两幅图像对应像素相加,下面为)图像相加是即将大小相等的两幅图像对应像素相加,下面为将将MATLAB软件自带图像进行相加处理得到。软件自带图像进行相加处理得到。clear,clcclose allIbackground=imread(
12、rice.png);%读入第一个图像读入第一个图像imshow(Ibackground)J=imread(cameraman.tif);%读入第二个图像读入第二个图像figure,imshow(J)K2=imadd(Ibackground,J,uint16);%图像相加图像相加figure,imshow(K2,)实验结果如图所示实验结果如图所示:(a)rice(b)cameraman(c)相加后的图像 4、实验内容程序设计部分、实验内容程序设计部分(1)对灰度图像、真彩色图像实现读取、显示和保存。)对灰度图像、真彩色图像实现读取、显示和保存。(2)matlab图像文件夹中的图像文件夹中的mri
13、.tif是一个包含是一个包含27帧、图像尺寸为帧、图像尺寸为128*128的多帧索引图像,请将前的多帧索引图像,请将前20帧图像顺序读入到一个数组中帧图像顺序读入到一个数组中并显示出来。并显示出来。(3)通过图像点运算减弱图像对比度。)通过图像点运算减弱图像对比度。(4)分别将索引色图像转换为灰度图像和二值图像,并将灰度图)分别将索引色图像转换为灰度图像和二值图像,并将灰度图像转换为索引色图像像转换为索引色图像(5)求对任意两幅大小不相等的图像相加的结果,并加以验证用)求对任意两幅大小不相等的图像相加的结果,并加以验证用语句:语句:K2=Ibackground+J;代替示例程序中代替示例程序中
14、K2=imadd(Ibackground,J,uint16);的处理结果是否相同。的处理结果是否相同。8.2 图像增强技术实验图像增强技术实验 1、实验目的、实验目的(1)了解图像增强的目的和意义。)了解图像增强的目的和意义。(2)掌握)掌握MATLAB中常用的图像增强函数的使用方法。中常用的图像增强函数的使用方法。(3)掌握图像灰度变换、图像平滑和图像锐化的算法原理。)掌握图像灰度变换、图像平滑和图像锐化的算法原理。2、实验中所用部分函数介绍、实验中所用部分函数介绍(1)imadjust 功能:调节灰度图像的亮度或彩色图像的颜色矩阵。功能:调节灰度图像的亮度或彩色图像的颜色矩阵。格式:格式:
15、J=imadjust(I,low_in;high_in,low_out;high_out,gamma)newmap=imadjust(map,low_in high_in,low_out high_out,gamma)RGB2=imadjust(RGB1,low_in high_in,low_out high_out,gamma)说明:说明:J=imadjust(I,low_in;high_in,low_out;high_out,gamma)中,将图像中,将图像I中的亮度值映射到中的亮度值映射到J中的新值,即中的新值,即将将low_in至至hige_in之间的值映射到之间的值映射到low_ou
16、t至至high_out之间的值。之间的值。它们都可以使用空的矩阵它们都可以使用空的矩阵,默认值是,默认值是0 1。newmap=imadjust(map,low_in high_in,low_out high_out,gamma)为调整索引色图像的调色板为调整索引色图像的调色板map。RGB2=imadjust(RGB1,low_in high_in,low_out high_out,gamma)为对为对RGB图像图像1的红、绿、蓝调色板分别进行的红、绿、蓝调色板分别进行调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。参数参数ga
17、mma指定了曲线的形状,该曲线用来映射指定了曲线的形状,该曲线用来映射I的亮度的亮度值。如果值。如果gamma小于小于1,映射被加权到更高的输出值。如果,映射被加权到更高的输出值。如果gamma大于大于1,映射被加权到更低的输出值。如果省略了函数的参,映射被加权到更低的输出值。如果省略了函数的参量,则量,则gamma默认为默认为1(线性映射)。(线性映射)。(2)imhist 功能:计算和显示图像的色彩直方图功能:计算和显示图像的色彩直方图 格式格式:imhist(I,n);imhist(X,map)说明:说明:其中其中,n 为指定的灰度级数目为指定的灰度级数目,缺省值为缺省值为256;imh
18、ist(X,map)就算和显示索引色图像就算和显示索引色图像 X 的直方图的直方图,map 为调色为调色板板。(3)histeq 功能:实现直方图均衡化功能:实现直方图均衡化 格式:格式:J=histeq(I,n);J=histeq(I,hgram);J,T=histeq(I,.)说明:说明:J=histeq(I,n)指定均衡化后的灰度级数指定均衡化后的灰度级数n,缺省值缺省值64;J=histeq(I,hgram)是是 实现直方图的规定化,即将实现直方图的规定化,即将原图象原图象 I 的直方图变换成用户指定的向量的直方图变换成用户指定的向量 hgram,hgram 中的每中的每一个元素都在一
19、个元素都在 0,1 中;中;J,T=histeq(I,.)返回从能将图像返回从能将图像 I 的灰度直方图的灰度直方图变换成图像变换成图像J的直方图的变换的直方图的变换T。(4)filter2 功能:基于卷积的图象滤波函数功能:基于卷积的图象滤波函数 格式:格式:Y=filter2(h,X)说明:说明:Y=filter2(h,X)返回图像返回图像X经滤波算子经滤波算子h滤波后的结果,滤波后的结果,默认返回图像默认返回图像Y与输入图像与输入图像X大小相同。大小相同。(5)fspecial 功能:产生预定义滤波器功能:产生预定义滤波器 格式:格式:H=fspecial(type)H=fspecial
20、(gaussian,n,sigma)高斯低通滤波器高斯低通滤波器H=fspecial(sobel)Sobel水平边缘增强滤波器水平边缘增强滤波器H=fspecial(prewitt)Prewitt水平边缘增强滤波水平边缘增强滤波器器H=fspecial(laplacian,alpha)近似二维拉普拉斯运算滤近似二维拉普拉斯运算滤波器波器H=fspecial(log,n,sigma)高斯拉普拉斯(高斯拉普拉斯(LoG)运)运算滤波器算滤波器H=fspecial(average,n)均值滤波器均值滤波器H=fspecial(unsharp,alpha)模糊对比增强滤波器模糊对比增强滤波器(6)im
21、noise 功能:给图像增加噪声功能:给图像增加噪声 格式格式:J=imnoise(I,type);J=imnoise(I,type,parameter)说明:说明:J=imnoise(I,type)返回对图像返回对图像 I 添加典型噪声后的有添加典型噪声后的有噪图像噪图像 J,参数,参数 type 和和 parameter 用于确定噪声的类型和相应的用于确定噪声的类型和相应的参数。参数。(7)medfilt2 功能:二维中值滤波功能:二维中值滤波 格式:格式:B=medfilt2(A)用用33的滤波窗口对图的滤波窗口对图像像A进行中值滤波。进行中值滤波。B=medfilt2(A,m n)用指
22、定大小为用指定大小为mn的窗的窗口对图像口对图像A进行中值滤波。进行中值滤波。说明:说明:B=medfilt2(A)表示用表示用33的滤波窗口对图像的滤波窗口对图像A进行进行中值滤波。中值滤波。B=medfilt2(A,m n)表示表示 用指定大小为用指定大小为mn的窗口的窗口对图像对图像A进行中值滤波。进行中值滤波。(8)imfilter 功能:多维图像滤波功能:多维图像滤波 格式:格式:B=imfilter(A,h)说明:将原始图像说明:将原始图像 A 按指定的滤波器按指定的滤波器 h 进行滤波处理,处理进行滤波处理,处理后的图像后的图像 B 与与 A 的尺寸和类型相同。的尺寸和类型相同。
23、3、实验内容示例部分、实验内容示例部分(1)对图像进行灰度变换,实现反转图像效果。)对图像进行灰度变换,实现反转图像效果。clear,clcclose allI=imread(cameraman.tif);subplot(1,2,1)imshow(I),title(原始图像原始图像)I1=imadjust(I,0 1,1 0);%利用函数实现反转利用函数实现反转subplot(1,2,2)imshow(I1)title(负片图像负片图像)实验结果如图所示:实验结果如图所示:(a)原始图像(b)反转图像 反转效果(2)对原始图像进行直方图均衡化。)对原始图像进行直方图均衡化。clear,clcc
24、lose allI=imread(circuit.tif);subplot(2,2,1),imshow(I)title(原始图像原始图像)subplot(2,2,2),imhist(I)title(原始图像直方图原始图像直方图)J=histeq(I,256);subplot(2,2,3),imshow(J)title(均衡化后的图像均衡化后的图像)subplot(2,2,4),imhist(J)title(均衡化后图像的直方图均衡化后图像的直方图)直方图均衡化(3)给原始图像增加椒盐噪声和高斯噪声,再分别用中值滤波和)给原始图像增加椒盐噪声和高斯噪声,再分别用中值滤波和均值滤波处理图像。均值滤
25、波处理图像。%含椒盐噪声和高斯噪声图像分别用中值滤波和均值滤波处理含椒盐噪声和高斯噪声图像分别用中值滤波和均值滤波处理clear,clcclose allI=imread(eight.tif);J1=imnoise(I,salt&pepper,0.02);%添加椒盐噪声添加椒盐噪声J2=imnoise(I,gaussian,0.02);%添加椒盐噪声添加椒盐噪声subplot(2,3,1),imshow(J1);title(salt&pepper(J1);subplot(2,3,4),imshow(J2);title(gaussian(J2)Z1=medfilt2(J1,3,3);%中值滤波中
26、值滤波Z2=medfilt2(J2,3,3);%中值滤波中值滤波subplot(2,3,2),imshow(Z1);title(medfilt2(J1)subplot(2,3,5),imshow(Z2);title(medfilt2(J2)K1=imfilter(J1,fspecial(average,3);%对添加高斯噪声后对添加高斯噪声后图像进行均值处理图像进行均值处理K2=imfilter(J2,fspecial(average,3);%对添加高斯噪声后对添加高斯噪声后图像进行均值处理图像进行均值处理subplot(2,3,3),imshow(K1);title(imfilter(J1)
27、subplot(2,3,6),imshow(K2);title(imfilter(J2)(a)含椒盐噪声图像(b)中值滤波(c)均值滤波(d)含高斯噪声图像(e)中值滤波(f)均值滤波(4)对图像进行空间域锐化滤波)对图像进行空间域锐化滤波 clear,clcclose allI=imread(moon.tif);w=fspecial(laplacian,0);w8=1,1,1;1,-8,1;1,1,1;%定义窗口模版定义窗口模版I1=imfilter(I,w,replicate);%滤波处理滤波处理figure(1);imshow(I);title(original image);J=im2
28、double(I);J2=imfilter(J,w8,replicate);K=J-J2;figure(2),imshow(K);imwrite(K,ruihua.bmp);(a)原始图像(b)空域锐化后的图像 空域锐化 4实验内容程序设计部分实验内容程序设计部分(1)利用函数)利用函数imadjust对灰度图像进行灰度变换。对灰度图像进行灰度变换。(2)对计算机中找到的灰度图像进行直方图均衡化)对计算机中找到的灰度图像进行直方图均衡化(3)用不同大小的均值滤波器模板对图像进行平滑滤波。)用不同大小的均值滤波器模板对图像进行平滑滤波。(4)采用)采用laplacian算子对示例(算子对示例(4
29、)中图像进行锐化处理。)中图像进行锐化处理。8.3 图像变换实验图像变换实验 1、实验目的、实验目的(1)了解图像频域变换和几何变换的目的和意义。)了解图像频域变换和几何变换的目的和意义。(2)掌握)掌握MATLAB中常用的图像频域变换、几何变换函数的使用中常用的图像频域变换、几何变换函数的使用方法。方法。(3)掌握图像傅里叶变换、离散余弦变换的算法原理。)掌握图像傅里叶变换、离散余弦变换的算法原理。(4)掌握图像位置变换、形状变换和复合变换的算法原理。)掌握图像位置变换、形状变换和复合变换的算法原理。(5)了解图像频域变换和空间变换的基本应用。)了解图像频域变换和空间变换的基本应用。2、实验
30、中所用部分函数介绍、实验中所用部分函数介绍(1)fft2 功能:二维离散傅里叶变换。功能:二维离散傅里叶变换。格式:格式:Afft2(X)(2)fftshift 功能:快速傅立叶变换的频率移位函数,用于将变换后的功能:快速傅立叶变换的频率移位函数,用于将变换后的图象频谱中心从矩阵的原点移到矩阵的中心。图象频谱中心从矩阵的原点移到矩阵的中心。格式:格式:B=fftshift(I)说明:对于矩阵说明:对于矩阵I,B=fftshift(I)将将I的一、三象限和二、的一、三象限和二、四象限进行互换。四象限进行互换。(3)dct2 功能:二维功能:二维 DCT 变换。变换。格式格式:B=dct2(A);
31、B=dct2(A,m,n);B=dct2(A,m,n)说明:说明:Bdct2(A)计算计算 A 的的 DCT 变换变换 B,A 与与 B 的大的大小相同;小相同;Bdct2(A,m,n)和和 B=dct2(A,m,n)通过对通过对 A 补补 0 或剪裁,使或剪裁,使 B 的大小为的大小为 mn。(4)idct2 功能:功能:DCT 反变换。反变换。格式格式:B=idct2(A);B=idct2(A,m,n);B=idct2(A,m,n)说明:说明:Bidct2(A)计算计算 A 的的 DCT 反变换反变换 B,A 与与 B 的大小相同;的大小相同;Bidct2(A,m,n)和和 B=idct2
32、(A,m,n)通过对通过对 A 补补 0 或剪裁,使或剪裁,使 B的大小为的大小为 mn。(5)imresize 功能:图像缩放函数。功能:图像缩放函数。格式:格式:B=imresize(A,scale,method);B=imresize(A,numrows numcols)说明:说明:B=imresize(A,scale)返回的图像返回的图像B的长宽是图像的长宽是图像A的的长宽的长宽的m倍。即缩放图像,倍。即缩放图像,m大于大于1,则放大图像;,则放大图像;m小于小于1,缩小,缩小图像;参数图像;参数method用于指定插值的方法,可选用的值为用于指定插值的方法,可选用的值为nearest
33、(最邻近法),(最邻近法),bilinear(双线性插值),(双线性插值),bicubic(双三次插(双三次插值),默认为值),默认为nearest。B=imresize(A,numrows numcols)中,中,numrows和和numcols分别指定目标图像的高度和宽度。由于这种格式允许图像分别指定目标图像的高度和宽度。由于这种格式允许图像缩放后长宽比例和原图像长宽比例不相同,因此所产生的图像有可缩放后长宽比例和原图像长宽比例不相同,因此所产生的图像有可能发生畸变。能发生畸变。(6)imrotate 功能:图像旋转函数。功能:图像旋转函数。格式:格式:B=imrotate(A,angle
34、,method)说明:参数说明:参数method用于指定插值的方法,可选用的值为用于指定插值的方法,可选用的值为nearest(最邻近法),(最邻近法),bilinear(双线性插值),(双线性插值),bicubic(双(双三次插值),默认为三次插值),默认为nearest。3、实验内容示例部分:、实验内容示例部分:(1)将真彩色图像变成灰度图像,并进行将真彩色图像变成灰度图像,并进行DCT变换,将变换,将DCT系数系数中小于中小于10的系数舍弃,使用的系数舍弃,使用idct2重构图像。重构图像。clear,clcclose allRGB=imread(autumn.tif);subplot(
35、2,2,1),imshow(RGB),title(RGB)I=rgb2gray(RGB);%彩色图像转化为灰度图像彩色图像转化为灰度图像J=dct2(I);%DCT变换变换subplot(2,2,2),imshow(I),title(J)K1=idct2(J);%离散余弦反变换离散余弦反变换subplot(2,2,3),imshow(K1,0 255),title(K1)J(abs(J)a(k)I(i,j)=255;else I(i,j)=0;end end endfigure(k+1),imshow(I),title(阈值阈值a=num2str(a(k)end(a)原始图像(b)阈值90 实
36、验结果(c)阈值130(d)阈值150 实验结果(2)利用直方图双峰法实现图像分割)利用直方图双峰法实现图像分割 I=imread(coins.png);subplot(2,2,1),imshow(I),title(原图原图);subplot(2,2,2);imhist(I);%直方图直方图 title(直方图直方图);u=imhist(I);for i=1:256 m(i)=0;endj=0;%求所有峰值灰度级求所有峰值灰度级for i=1:254 for b=i+1 for c=b+1 if u(i)u(c)j=j+1;m(j)=b;end end endend%求峰值中最小灰度级求峰值中
37、最小灰度级w=m(1);for k0=2:j if u(m(k0)u(p)p=m(k);endend%求出与最大峰值相邻的峰值灰度级求出与最大峰值相邻的峰值灰度级l=u(w);for k1=1:j if u(m(k1)l;x=m(k1)-p;if(abs(x)30)l=u(m(k1);q=m(k1);end endendif pq k2=q;k3=p;else k2=p;k3=q;end%求出直方图谷底灰度值求出直方图谷底灰度值l1=u(k2);for n1=(k2+1):(k3-1)if l1u(n1)l1=u(n1);p1=n1;endendF=im2bw(I,p1/255);%二值化二值
38、化subplot(2,2,3),imshow(F),title(二值化后图像二值化后图像);双峰法阈值分割 4实验内容程序设计部分实验内容程序设计部分(1)调用)调用edge函数利用多种边缘检测算子检测图函数利用多种边缘检测算子检测图8.4.3中图像的边中图像的边缘。缘。(2)利用图像分割处理测试图中图像中的微小结构。提示:在获)利用图像分割处理测试图中图像中的微小结构。提示:在获取阈值的基础上进行二值化处理,再在进行形态学处理。取阈值的基础上进行二值化处理,再在进行形态学处理。例图 例图 8.5 图像压缩编码实验图像压缩编码实验 1、实验目的、实验目的(1)了解图像压缩的目的和意义。)了解图
39、像压缩的目的和意义。(2)掌握)掌握MATLAB中常用的图像压缩函数的使用方法。中常用的图像压缩函数的使用方法。(3)掌握基于)掌握基于DCT和小波变换的压缩算法原理,掌握算术编码的和小波变换的压缩算法原理,掌握算术编码的算法原理。算法原理。2、实验中所用部分函数介绍、实验中所用部分函数介绍(1)dctmtx 功能:计算功能:计算 DCT 变换矩阵变换矩阵 格式:格式:Ddctmtx(n)说明:说明:Ddctmtx(n)返回一个返回一个 nn 的的 DCT 变换矩阵,输变换矩阵,输出矩阵出矩阵 D 为为 double 类型。类型。(2)blkproc 功能:实现图像的分块处理。功能:实现图像的
40、分块处理。格式格式:B=blkproc(A,m n,fun)说明:说明:A为输入图像,为输入图像,B为输出图像,为输出图像,m n指定块大小,指定块大小,fun指定对所有块进行处理的函数指定对所有块进行处理的函数。(3)im2col 功能:重调图像块为列。功能:重调图像块为列。格式:格式:B=im2col(A,m n,block_type)说明:将矩阵说明:将矩阵A分为分为mn的子矩阵,再将每个子矩阵作为的子矩阵,再将每个子矩阵作为B的一列。当的一列。当block_type为为distinct时,将时,将A分解为互不重叠的子矩分解为互不重叠的子矩阵,若不足阵,若不足mn,以,以0补足;当补足;
41、当block_type为为sliding时,将时,将A分解分解为尽可能多的子矩阵,若不足为尽可能多的子矩阵,若不足mn,不以,不以0补足。补足。(4)im2double 功能:转换图像矩阵为双精度型。功能:转换图像矩阵为双精度型。格式格式:I2=im2double(I1)(5)wavedec2 功能:二维信号的多层小波分解功能:二维信号的多层小波分解 格式:格式:C,S=wavedec2(X,N,wname);C,S=wavedec2(X,N,Lo_D,Hi_D)说明说明:C,S=wavedec2(X,N,wname)使用小波基函使用小波基函数数 wname 对二维信号对二维信号 X 进行进行
42、 N 层分层分;C,S=wavedec2(X,N,Lo_D,Hi_D)使用指定的分解低通和高通滤使用指定的分解低通和高通滤波器波器 Lo_D 和和 Hi_D 分解信号分解信号 X(6)appcoef2 功能:提取二维信号小波分解的近似分量功能:提取二维信号小波分解的近似分量 格式:格式:A=appcoef2(C,S,wname,N)说明:说明:wname为小波名称,为小波名称,N为一整数。为一整数。(7)detcoef2 功能:功能:提取二维信号小波分解的细节分量提取二维信号小波分解的细节分量 格式格式:D=detcoef2(O,C,S,N)说明:其中说明:其中O=h,代表水平细节分量;,代表
43、水平细节分量;O=v ,代表垂直细节分量;,代表垂直细节分量;O=d,代表对角细节分量;,代表对角细节分量;N为一整数。为一整数。(8)wrcoef2 功能:由多层小波分解重构某一层的分解信号。功能:由多层小波分解重构某一层的分解信号。格式:格式:X=wrcoef2(type,C,S,wname)说明:说明:X=wrcoef2(type,C,S,wname)返回基于小波分解结返回基于小波分解结构构C,S的小波重构图像。参数的小波重构图像。参数type等于等于a表示重构近似系数;表示重构近似系数;等于等于h表示重构水平细节系数;等于表示重构水平细节系数;等于v表示重构垂直细节系数,等于表示重构垂
44、直细节系数,等于d表示重构对角细节系数。表示重构对角细节系数。3、实验内容示例部分、实验内容示例部分(1)将原始图像首先分割成将原始图像首先分割成1616的子图像,然后对每个子图像的子图像,然后对每个子图像进行进行DCT,将每个子图像的,将每个子图像的256个个DCT系数舍去系数舍去35小的变换系数,小的变换系数,进行压缩,显示解码图像。进行压缩,显示解码图像。initialimage=double(initialimage);t=dctmtx(16);dctcoe=blkproc(initialimage,16,16,P1*x*P2,t,t);将图像分将图像分成成88子图像,求子图像,求DC
45、Tcoevar=im2col(dctcoe,16,16,distinct);将变换系数矩将变换系数矩阵重新排列阵重新排列coe=coevar;y,ind=sort(coevar);m,n=size(coevar);snum=256-256*cr;根据压缩比确定要将系数变为根据压缩比确定要将系数变为0的的个数个数clear,clc;close all;cr=0.5;initialimage=imread(cameraman.tif);读取原图像读取原图像imshow(initialimage);显示原图像显示原图像title(原始图像原始图像)for i=1:n coe(ind(1:snum),
46、i)=0;将最小的将最小的snum个变换系数设为个变换系数设为0end b2=col2im(coe,16,16,256,256,distinct);重新排列系数重新排列系数矩阵矩阵i2=blkproc(b2,16,16,P1*x*P2,t,t);求逆离散余弦变换求逆离散余弦变换(IDCT)i2=uint8(i2);figureimshow(i2)显示压缩后的图像。显示压缩后的图像。title(压缩图像压缩图像)程序运行结果如图所示。程序运行结果如图所示。(a)原图(b)压缩解码后图像 实验结果(2)利用小波工具箱专用的阈值压缩图像函数()利用小波工具箱专用的阈值压缩图像函数(wdencmp)进
47、行)进行图像压缩图像压缩 i=imread(cameraman.tif);%读取图片读取图片n=2;%进行进行2层小波分解层小波分解w=coif2;%选取小波选取小波c,l=wavedec2(i,n,w);%全局阈值全局阈值thr,sorh,keepapp=ddencmp(cmp,wv,i);%对高频系数进行阈值化处理进行压缩对高频系数进行阈值化处理进行压缩Xcomp,cxc,lxc,perf0,perfl2=wdencmp(gbl,c,l,w,n,thr,sorh,keepapp);%显示原图像显示原图像subplot(1,2,1);imshow(i);title(原始图像原始图像);%显示
48、压缩后图像显示压缩后图像subplot(1,2,2);Xcomp=uint8(Xcomp);imshow(Xcomp);title(压缩后图像压缩后图像);%显示压缩有关信息显示压缩有关信息disp(小波分解系数中值为小波分解系数中值为0的系数个数百分比的系数个数百分比);disp(perf0);disp(压缩后剩余能量百分比压缩后剩余能量百分比);disp(perfl2)实验结果如图所示:实验结果如图所示:(a)图像压缩(3)利用)利用DCT变换进行图像压缩。变换进行图像压缩。clear,clcclose allI=imread(cameraman.tif);I=im2double(I);T
49、=dctmtx(8);B=blkproc(I,8,8,P1*x*P2,T,T);%将图像分为将图像分为8块块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);求逆离散余弦变换求逆离散余弦变换imshow(I)figure,imshow(I2)实验结果如图所示:实验
50、结果如图所示:(a)原始图像(b)解压缩图像 实验结果 4、程序设计部分、程序设计部分(1)对图像进行小波分解后,会得到一系列不同分辨率的子图像,)对图像进行小波分解后,会得到一系列不同分辨率的子图像,表征图像最主要的部分是低频部分,高频部分的大部分数据接近于表征图像最主要的部分是低频部分,高频部分的大部分数据接近于0,因此可以利用小波分解去掉图像的高频部分,保留图像的低频,因此可以利用小波分解去掉图像的高频部分,保留图像的低频部分来进行图像数据压缩。请利用二维小波变换对图像进行编码。部分来进行图像数据压缩。请利用二维小波变换对图像进行编码。(提示:首先利用(提示:首先利用wavedec2函数