1、数字图像处理实验讲义16学时2011年版 作者: 日期:2 个人收集整理 勿做商业用途实验1 图像基本操作1. 实验要求在MATLAB环境下完成下列操作:读入图像;保存图像;图像的显示方法2. 实验类型 验证型3. 实验时间 2学时4. 实验方法使用函数imread可以将图像读入MATLAB环境,imread的语法为imread( filename )imread所支持的文件格式包括:TIFF- 。tif .tiffJPEG- .jpg 。jpegGIF- .gifBMP- .bmpPNG- .pngXWD- 。xwd使用函数imwrite可以将图像保存在磁盘上,imwrite的语法为imwr
2、ite( f, filename )使用函数size可以察看图像大小,size的语法为size( )使用函数imfinfo可以察看图像信息,imfinfo的语法为imfinfo filename使用函数imshow可以显示图像缩略图,imshow的语法为imshow ( )使用函数imview可以显示图像原图,imview的语法为,不同的是imview是一个工具,可以完成一些基本的图像操作imview ( )使用函数figure可以开辟一个新的窗口,figure的语法为figure, imshow ( )figure, imview ( )figure, plot ( )使用数据类型转换函数可
3、以转换图像数据类型,如im2uint8 ( ) - convert image to uint8im2uint16 ( ) - convert image to uint16mat2gray ( ) - convert image to double, range0 , 1im2double ( ) - convert image to doubleim2bw ( ) - convert image to logical5. 实验过程使用函数imread打开一幅灰度图像(fig0309abc.jpg),使用函数imwrite将图像另存为不同的文件名;在此过程中观察图像矩阵的形式,并用图像矩阵的
4、索引法,观察并记录55的矩阵片断;使用函数size察看图像大小,使用函数imfinfo察看图像信息;记录图像信息;分别使用函数imshow和函数imview显示图像;记录两种方式的区别;使用函数imread打开一幅彩色图像(start。jpg),观察图像矩阵的形式;并分别观察和记录RGB三色55的矩阵片断;使用函数rgb2gray将彩色图像转换为灰度图像;使用im2uint8和im2double转换图像的数据类型,记录55矩阵片断在转换前后的变化。实验2 图像点运算1 实验要求在MATLAB环境下完成下列操作:读入图像;图像灰度变换方法;灰度的对数扩展法;绘制灰度直方图;直方图均衡法;任意灰度
5、变换实现;2 实验类型 验证型3 实验时间 2学时4 实验方法使用函数imadjust可以实现图像灰度变换,imadjust的语法为imadjust ( f, low_in high_in , low_out high_out , gamma )gamma所表示的意义:1 - 凹曲线1 - 凸曲线=1 - 直线灰度的对数扩展法 g = c*log( 1+ double( f ) )目的是使亮区域得到抑制,暗区域灰度得到均匀增强使用语句im2uint8(mat2gray( log( 1+ double (f) ) ) ) 其中系数c通过mat2gray函数自动调整灰度直方图反映图像的灰度分布情况
6、,即亮度分布情况;它说明不同灰度的像素个数或分布概率使用函数imhist绘制灰度直方图,imhist的语法为h = imhist( f );figure, imhist( f );figure, plot( h );figure, stem( h );figure, bar( h );由于拍摄和处理的原因,导致图像的灰度分布范围过小;最大熵原理指出:数据满足均匀分布时,信息量最大;依据这个原理,通过灰度直方图均衡化将图像灰度分布扩展到整个灰度分布范围,可以使图形信息量最大,即使使得图像对比度增强。使用函数histeq对图像进行直方图均衡,histeq的语法为g = histeq( f, nle
7、v ); nlev为输出的灰度级数,通常取256,默认64figure, imhist(g);图1任意灰度变换需要进行分段计算,如图1 *f , 0fa ;g = *(f-a)+ga , afb ; (f-b)+gb , bfc ;5 实验过程使用函数imread打开一幅灰度图像(fig0222b。jpg),使用函数imadjust实现图像灰度变换;分别使用:g1= imadjust ( f, 20 255 , 0 255 , 0.5 );g2= imadjust ( f, 20 255 , 0 255 , 1 );g3= imadjust ( f, 20 255 , 0 255 , 2 );
8、g4= imadjust ( f, 0 255 , 255 05 , 1 );figure, imshow(g1);figure, imshow(g2);figure, imshow(g3);figure, imshow(g4);观察并记录四种变换差别。(注意:请将方括号内的整数需要手工折算成浮点数)使用函数imread打开一幅灰度图像(fig0305.tif),使用如下语句进行对数扩展figure, imshow(f2);g5= im2uint8(mat2gray(log(1+double (f2)));figure, imshow(g5);观察并记录均衡前后的差别。使用函数imread打开
9、一幅灰度图像(fig0222b.jpg),使用函数imhist绘制灰度直方图,直方图有四种表现形式h = imhist( f3 );figure, imhist( f3 );figure, plot( h );figure, stem( h );figure, bar( h );观察四种直方图的差别.使用函数imread打开一幅灰度图像(fig0308。tif),说明这幅图像直方图存在的问题.使用函数histeq对图像进行直方图均衡,比较并记录均衡前后图像的变化h1 = histeq( f3, 256 );figure, imhist( h1 );figure, imshow( f3 );fi
10、gure, imshow( h1 );打开一幅灰度图像(fig0309abc.jpg),编写一个m文件完成图2的灰度变换功能,观察并记录图像变换前后的区别,将程序记录图2实验3 图像间的运算1 实验要求在MATLAB环境下完成下列操作:图像加法;图像减法;图像乘法;图像除法;图像与或非等逻辑运算;2 实验类型 验证型3 实验时间 2学时4 实验方法图像加法是把图像叠加在一起的操作,使用函数imadd将两幅图像相加.f1=imread(Fig0206a。tif); %读入图像f2=imread(Fig0207.tif ); 读入图像f3=imadd(f1,f2);figure,imshow(f3
11、);图像减法是从一幅图像中减去另一幅图像,经常被用作检测两幅图像的差别,使用函数imsubtract将两幅图像相减。下面的操作是根据一幅原始图像,生成其背景亮度图像,然后再从原图像中减去背景亮度图像,从而得到结果。f4=imread(Fig0404.jpg); 读入图像bkgrd=imopen(f4,strel(disk,15);f5=imsubtract(f4, bkgrd);figure,subplot(1,2,1),imshow(f4);subplot(1,2,2),imshow(f5);图像乘法将两幅图像对应点的像素进行相乘操作(MATLAB的点乘),使用函数immultiply对两幅
12、图像进行乘法操作,并将相乘的结果作为输出图像对应点的像素值。f6=imread(Fig0206a.tif); %读入图像f7=imread( Fig0207.tif ); %读入图像f8=immultiply(f6,f7); %两幅图像相乘f9=immultiply(f6,1。2); 图像和一个系数相乘,等于将灰度乘以一个系数figure,subplot(2,2,1),imshow(f6);subplot(2,2,2),imshow(f7);subplot(2,2,3),imshow(f8);subplot(2,2,4),imshow(f9);图像除法将两幅图像对应点的像素进行相除操作(MAT
13、LAB的点除),使用函数imdivide对两幅图像进行除法操作,并将相除的结果作为输出图像对应点的像素值.f10=imread( Fig0206a.tif ); %读入图像f11=imread( Fig0207。tif ); %读入图像f12=double(f11);f13=f120。2+50;f14=uint8(f13);f15=imdivide (f10,f14);figure,imshow(f15);图像间的逻辑运算主要有“与”、“或”、“非”等,把它们组合起来可以构成其他逻辑运算。当我们对灰度级进行逻辑操作时,像素值作为一个二进制数来处理,逻辑操作按位进行。“与和“或”运算通常用作模板
14、,即通过这些操作可以从一幅图像中提取子图像,更加突出子图像的内容.下面的“与和“或运算通过逐点进行。f=imread(fig0222b。jpg); %读入图像m,n=size(f);figure,subplot(2,3,1),imshow(f);f1=zeros(m,n);f1(20:150,70:170)=255;f1=uint8(f1);subplot(2,3,2),imshow(f1);for i=1:m for j=1:n f2(i,j)=bitand(f(i,j),f1(i,j)); endendsubplot(2,3,3),imshow(f2); %显示“与”的结果f3=ones(
15、m,n)255;f3(20:150,70:170)=0;f3=uint8(f3);subplot(2,3,5),imshow(f3);for i=1:m for j=1:n f4(i,j)=bitor(f(i,j),f3(i,j); endendsubplot(2,3,6),imshow(f4); 显示“或”的结果for i=1:m for j=1:n f5(i,j)=bitxor(f(i,j),255); %和1取异或等于求反 endendsubplot(2,3,4),imshow(f5); %显示“非”的结果5 实验过程使用函数imadd将两幅图像相加 (Fig0206a.tif) (Fi
16、g0207。tif ),观察并记录结果。使用函数imsubtract将两幅图像相减(Fig0404。jpg),观察并记录结果。使用函数immultiply对两幅图像进行乘法操作(Fig0206a。tif) (Fig0207。tif ),并将相乘的结果作为输出图像对应点的像素值,观察并记录结果。使用函数imdivide对两幅图像进行除法操作(Fig0206a.tif) (Fig0207。tif ),并将相除的结果作为输出图像对应点的像素值,观察并记录结果。使用点运算进行图像“与”、“或”、“非”操作(fig0222b。jpg),观察并记录结果.实验4 图像空间运算1. 实验要求在MATLAB环境
17、下完成下列操作:均值滤波方法;中值滤波方法;边缘检测;基于边缘检测的图像增强法;采用边缘检测和灰度变换结合图像增强法;2. 实验类型 验证型3. 实验时间 2学时4. 实验方法图像的空间滤波使用函数imfilter实现,imfilter的语法为imfilter ( f, w, filtering_mode , boundary_option , size_option )f - image matrix w - image mask 为可选项均值滤波的掩模 ,,等中值滤波的函数medfilt2()边缘检测的算子,,,,,等基于边缘检测的图像增强算子,,,,等采用边缘检测和灰度变换结合图像增强法
18、 设是图像经过一阶梯度运算的结果 1 2 3 4 5. 实验过程使用函数imread打开一幅有噪声的灰度图像(fig0318.tif);分别使用:均值滤波的各种掩模过滤噪声,观察并记录各种掩模处理结果的差异,注意掩模的系数中值滤波观察并记录和中值滤波相比的结果差异使用函数imread打开一幅灰度图像(fig0316.tif);分别使用:使用各种边缘检测的算子检测边缘,观察并记录各种算子处理结果的差异.使用各种边缘增强的算子处理图像,观察并记录各种算子处理结果的差异. 打开一幅灰度图像(fig0413。tif),编程实现四种采用边缘检测和灰度变换结合图像增强法设门限T=210,LG=230,LB
19、=50,(这是参考数值,请根据实际情况调整)记录程序,并且比较四种处理结果的差异实验5 图像频域运算1 实验要求在MATLAB环境下完成下列操作:掌握图像进行二维DFT的方法;完成简单的图像频域滤波;采用频域处理对图像增强法;2 实验类型 验证型3 实验时间 2学时4 实验方法图像的图像进行二维DFT使用函数fft2()实现,fft2()的语法为F=fft2(f);为了显示频谱的实部使用 S=abs(F);figure,imshow(S, );为了将频谱居中显示,使用函数fftshift()搬移,fftshift()的语法为Fc=fftshift(F);figure,imshow(Fc, );
20、为了使频谱的对比度增强,采用对数增强法S2=log(1+abs(Fc);figure,imshow(S2, )将图像进行IDFT之前,使用函数ifftshift()将频谱反向搬移,然后使用函数ifft2()进行IDFT生成低通滤波使用函数lpfilter(),生成高通滤波使用函数hpfilter(),(参考函数部分)H1=lpfilter(ideal,M,N,D0);H2=hpfilter(ideal,M,N,D0);对图像进行频域滤波使用函数dftfilt(),(参考函数部分)G1=dftfilt(f,H1);G2=dftfilt(f,H2);figure,imshow(G1, );figu
21、re,imshow(G2, );对图像进行高频强调增强,是在保持图像特征的基础上,对高频部分进行一定提升H3=0。5+2*H2;G3=dftfilt(f,H3);figure,imshow(G3, );5 实验过程使用函数imread打开一幅图像(fig0403.tif),对图像进行DFT,频谱搬移,反搬移,和IDFT使用函数imread打开一幅灰度图像(fig0413。tif),对图像进行低通滤波,高通滤波,和高频增强设计一种频域图像增强方法对图像fig0419。tif进行增强,同时采用空间增强方法对结果进行比较实验6 图像退化和复原1 实验要求在MATLAB环境下完成下列操作:完成图像运动
22、模糊退化;完成有约束的最小二乘方滤波;完成图像维纳滤波;完成图像逆滤波;比较各种方法的优缺点;2 实验类型 验证型3 实验时间 2学时4 实验方法创建一个运动模糊退化滤波器(退化滤波器PSF),使用函数fspecial创建退化滤波器PSF,然后调用imfilter对图像进行卷积运算,就可以得到一幅运动退化图像。I=imread(fig0222b。jpg); 读入图像figure,subplot(1,2,1),imshow(I);LEN=31;THETA=11;PSF=fspecial(motion,LEN,THETA); 生成退化函数blurred=imfilter(I,PSF, circul
23、ar, conv);subplot(1,2,2),imshow(Blurred);然后使用imnoise函数对图像添加随机噪声。fnblurred =imnoise( blurred, gaussian,0,0。001); %产生随机噪声图像figure, imshow(fnblurred);下面,使用函数deconvwnr对无噪声的运动模糊图像进行复原,这里假设退化函数PSF已知LEN=31;THETA=11;PSF=fspecial(motion,LEN,THETA);wnr1=deconvwnr(blurred,PSF);figure,imshow(wnr1);然而,实际情况是退化函数P
24、SF是未知的,只能通过一些先验参数进行复原,所以,这里采用不同的LEN和THETA参数,进行实验,体会一下退化函数PSF的重要性.wnr2=deconvwnr(blurred, fspecial(motion,2*LEN,THETA));figure,subplot(1,2,1),imshow(wnr2);wnr3=deconvwnr(blurred, fspecial(motion, LEN, 2THETA));subplot(1,2,2),imshow(wnr3);接下来,使用函数deconvwnr对一幅有噪声的运动模糊图像进行维纳滤波复原。wnr4=deconvwnr(fnblurred
25、,PSF);figure,imshow(wnr4);从结果中可以看出,复原效果不是很好,这是由于维纳滤波器设计不合适所导致的.为了使维纳滤波复原的效果变好,必须使用deconvwnr函数的可选参数NSR、NCORR和ICORR,通过改变参数获得不同的复原效果。pnoise=imnoise(zeros(size(f),gaussian,0,0.001);NSR=sum(pnoise(:)。2) /sum(im2double(fnblurred(:).2); 使用信噪比作为约束条件wnr5= deconvwnr(fnblurred,PSF,NSR);NP=abs(fftn(pnoise))。2;N
26、CORR=fftshift(real(ifftn(NP))); %使用噪声自相关函数IP= abs(fftn(im2double(fnblurred)))。2;ICORR=fftshift(real(ifftn(IP))); %使用图像自相关函数wnr6= deconvwnr(fnblurred,PSF, NCORR, ICORR);figure,imshow(wnr6);盲目去卷积法可在对退化情况完全不知情的下(忽略噪声影响)进行逆滤波操作。可以使用deconvblind函数进行盲目去卷积。PSF=fspecial(gaussian,7,10);blurred01=imfilter(I,PS
27、F, circular, conv);figure, imshow(blurred01);UNDERPSF=ones(size(PSF)4);J1 P1= deconvblind(blurred01, UNDERPSF); 使用较小的PSF进行逆滤波figure, imshow(J1); OVERPSF=padarray(UNDERPSF,4 4, replicate, both); J2 P2= deconvblind(blurred01, OVERPSF); 使用较大的PSF进行逆滤波figure, imshow(J2); INITPSF=padarray(UNDERPSF,2 2, re
28、plicate, both); J3 P3= deconvblind(blurred01, INITPSF); % 使用真实的PSF进行逆滤波figure, imshow(J3);从结果中可以发现,退化函数PSF对图像复原质量有着非常重要的影响,实际应用中可以通过分析,使用不同大小的PSF对图像进行复原,从中选择一个最合适的PSF使用。5 实验过程使用函数fspecial创建退化滤波器PSF,然后调用imfilter对图像进行卷积运算,就可以得到一幅运动退化图像,观察并记录结果.使用imnoise函数对图像添加随机噪声,观察并记录结果。使用函数deconvwnr对无噪声的运动模糊图像进行复原,
29、观察并记录结果.同时采用不同的LEN和THETA参数,进行实验,体会一下退化函数PSF的重要性,观察并记录结果.使用函数deconvwnr对一幅有噪声的运动模糊图像进行维纳滤波复原,观察并记录结果。为了使维纳滤波复原的效果变好,必须使用deconvwnr函数的可选参数NSR、NCORR和ICORR,通过改变参数获得不同的复原效果,观察并记录结果。使用deconvblind函数进行盲目去卷积,采用不同的退化函数,观察并记录结果。实验7 彩色图像处理1 实验要求在MATLAB环境下完成下列操作:学习MATLAB中彩色图像的表示方法掌握彩色图像空间的转换方法掌握彩色图像平滑滤波和锐化的方法2 实验类
30、型 验证型3 实验时间 2学时4 实验方法令fr, fg , fb分别代表RGB彩色图像的三个色彩分量,一幅RGB图像利用cat( )函数将三个分量合成为一幅RGB图像,语法为rgb_image = cat (3, fr, fg, fb)其中rgb_image为已经读入的彩色图像矩阵使用函数rgb2gray可以将彩色图像转换为灰度图像,rgb2gray的语法为rgb2gray ( )也可以直接提取RGB彩色图像的三个色彩分量,语法为fr = rgb_image (:, :, 1)fg = rgb_image (:, :, 2)fb = rgb_image (:, :, 3)在MATLAB中,可
31、以将彩色图像在各个色彩空间中相互转换,语法为rgb空间和YCrCb空间的转换ycbcr_image = rgb2ycbcr(rgb_image)彩色图像由于还有色彩信息,因此它的平滑和锐化,必须在每个色彩分量中分别进行5 实验过程使用函数imread打开一幅彩色图像(start.jpg);观察RGB三个分量的值,将三个分量显示出来,观察其中差异将一幅彩色图像(start.jpg)分别转换到YCrCb,CMYK空间,将四个空间的图像显示出来,观察其中差异使用函数imread打开一幅彩色图像(fig0618.tif),提取三个分量,用矩阵,对图像在三个分量进行平滑,分别观察三个分量平滑结果以及合成
32、彩色图像后的平滑结果将图像fig0618。tif转换到YCrCb空间,提取三个分量,用矩阵,对图像在三个分量进行平滑,分别观察三个分量平滑结果以及合成彩色图像后的平滑结果请比较分别比较在RGB空间和YCrCb空间进行平滑的效果使用函数imread打开一幅彩色图像(fig0618.tif),提取三个分量,用拉普拉斯算子,对图像在三个分量进行锐化,分别观察三个分量锐化结果以及合成彩色图像后的锐化结果将图像fig0618。tif转换到YCrCb空间,提取三个分量,用拉普拉斯算子,对图像在三个分量进行锐化,分别观察三个分量锐化结果以及合成彩色图像后的锐化结果请比较分别比较在RGB空间和YCrCb空间进
33、行锐化的效果实验8 图像形态学操作1 实验要求在MATLAB环境下完成下列操作:学习图像形态学的基本原理和方法掌握图像形态学操作的一般方法;完成简单的图像形态操作;设计简单的形态操作方案;2 实验类型 验证型3 实验时间 2学时4 实验方法图像进行膨胀使用函数imdilate()实现,imdilate()的语法为F=imdilate (f,B);其中B是结构元素图像进行腐蚀使用函数imerode()实现,imerode ()的语法为F=imerode (f,B);其中B是结构元素图像进行开运算使用函数imopen()实现,imopen ()的语法为F=imopen (f,B);其中B是结构元素
34、图像进行闭运算使用函数imclose()实现,imclose ()的语法为F=imclose (f,B);其中B是结构元素图像的结构元素B可以手工输入,也可以程序生成生成结构元素使用函数 strel()实现,strel ()的语法为B = strel(shape,parameters)函数strel()的使用说明参考matlab帮助图像的贴标签操作使用函数 bwlabel()实现,bwlabel ()的语法为L, n = bwlabel(f,conn)其中,conn是联接数,L是贴过标签的图像,n是最大的标签数5 实验过程使用函数imread打开一幅灰度图像(fig0906。tif);对图像进
35、行膨胀运算,分别使用半径为5的结构元素或B=ones(5)或B=strel(rectangle,5 5)使用函数imread打开一幅灰度图像(fig0908.tif);对图像进行腐蚀运算,分别使用半径为5,10,20的结构元素,观察三种的结果的差异;使用函数imread打开一幅灰度图像(fig0910.tif);使用半径为10的结构元素,分别对图像进行开运算和闭运算,观察两种运算结果之间的差异;使用函数imread打开一幅灰度图像(fig0926bw。tif);这是一张米粒的照片,设计一种方法,使用前面介绍的函数计算米粒的个数(提示:可使用函数bwlable计算单联通域的个数)附录:IPT图像
36、处理函数列表 Geometric transformations。 pixeldup Duplicate pixels of an image in both directions. vistformfwd Visualize forward geometric transformation. Pixel values and statistics。 covmatrix - Covariance matrix of vector population。 statmoments - Statistical central moments of image histogram。 Image ana
37、lysis, including segmentation, description, recognition. bayesgauss - Bayes classifier for Gaussian patterns。 bound2eight Convert 4connected boundary to 8-connected。 bound2four - Convert 8-connected boundary to 4connected. bound2im - Convert boundary to image。 boundaries Trace region boundaries。 bsu
38、bsamp Subsample a boundary. colorgrad Vector gradient of RGB image. colorseg - Segment a color image. connectpoly Connect vertices of polygon. diameter - Measure diameter of image regions。 fchcode - Freeman chain code of boundary。 frdescp Fourier descriptors。 hough Hough transform. houghlines Extrac
39、t line segments using Hough transform。 houghpeaks - Detect peaks in Hough transform. houghpixels - Image pixels associated with Hough transform bin。 ifrdescp Inverse Fourier descriptors。 imstack2vectors - Extract vectors from image stack。 invmoments - Invariant moments of image。 mahalanobis - Mahala
40、nobis distance. minperpoly - Minimum perimeter polygon。 polyangles Internal angles of polygon vertices。 princomp Principal-component vectors. randvertex Randomly perturb polygon vertices. regiongrow - Segmentation by region growing. signature - Signature of boundary. specxture Spectral texture of image. splitmerge Segment image using splitand-merge. statxture Statistical texture measures of image. strsimilarity - Similarity measurement