《数字图像处理试验报告全答案.docx》由会员分享,可在线阅读,更多相关《数字图像处理试验报告全答案.docx(41页珍藏版)》请在三一办公上搜索。
1、实验一常用MATLAB图像处理命令实验目的1、熟悉并掌握MATLAB工具的使用;2、实现图像的读取、显示、代数运算和简单变换。二、实验环境MATLAB6.5以上版本、WINXP或WIN2000计算机三、常用函数读写图像文件1 imreadimread函数用于读入各种图像文件,如:a=imreadCe:w01.tif*)2 imwriteiniwrite函数用于写入图像文件,如:imwrite(a,1e:wO2.tif1,9tif,)3 imfinfoimfinfo函数用于读取图像文件的有关信息,如:imfinfoCe:wOLtif,)图像的显示1 imageimage函数是MATLAB提供的最
2、原始的图像显示函数,如:a=l,2,3,4;4,5,6,7;8,9,10,11,121;image(a);2 imshowimshow函数用于图像文件的显示,如:i=imread(e:w01.tif,);imshow(i);title(原图像)加上图像标题3 colorbarCOlOrbar函数用显示图像的颜色条,如:i=imread(e:w01.tif,);imshow(i);coIorbar;4 figurefigure函数用于设定图像显示窗口,如:figure(1);/figure(2);5 subplot把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示。Subplot(m,n,
3、P)分成m*n个小窗口,在第P个窗口中创建坐标轴为当前坐标轴,用于显示图形。6 plot绘制二维图形plot(y)Plot(x,y)Xy可以是向量、矩阵。图像类型转换1 rgb2gray灰色把真彩图像转换为灰度图像i=rgb2gray(j)2 im2bw黑白通过阈值化方法把图像转换为二值图像I=im2bw(j,level)1.eVel表示灰度阈值,取值范围01(即0.n),表示阈值取自原图像灰度范围的n%3imresize改变图像的大小I=imresize(j,mn)将图像j大小调整为In行n歹J图像运算1 imadd两幅图像相加,要求同样大小,同种数据类型Z=imadd(x,y)表示图像x+
4、y2 imsubstract两幅图像相减,要求同样大小,同种数据类型Z=imsubtract(x,y)表示图像-y3 immultiplyZ=Immultiply(x,y)表示图像x*y4 imdivideZ=imdivide(x,y)表示图像x/y5:m=iinadjust(a,10.5;1);%图像变亮n=imadjust(a,0;0.5D;%图像变暗g=255a%负片效果四、实验内容(请将实验程序填写在下方合适的位置,实验图像结果拷屏粘贴)1、读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。a=miread(f:l
5、Jpg1)i=rgb2giay(a)I=ini2bw(a,0.5)subpk)t(3,l,l);imshow(a);title(,原图像)subpk)t(3,l,2);imshow(D;titleC灰度图像)subpk)t(3,l,3);imshow(l);title(,二值图像)原图像灰度图像二值图像2、对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题。a=imtead(,f:Ljpg)A=muesize(a.800800)b=inuead(f:2.jpg)B=iniiesize(b.800800)ZI=imadd(A,B)Z2=imsubtfact
6、(A.B)Z3=inunultiply(A,B)Z4=imdivide(A,B)subplot(3,2,l);imshow(八);titleC原图像A,)subplot(3,2,2);imshow(B);titleC原图像B*)subplot(3,2,3);imshow(ZI);titleC加法图像)subplot(3,2,4);inishow(Z2)JtitIeC减法图像)subplot(3,2,5);inishow(Z3);titleC乘法图像)Subploto,2,6);imshow亿2);tiUe(除法图像)原图像A原图像加法图像减法图像乘法图像除法图像3、对一幅图像进行灰度变化,实现
7、图像变亮、变暗和负片效果,在同一个窗口内分成四个子窗口来分别显示,注上文字标题。a=miread(f:l.jpg1);m=iinadjust(a,0.5;!);%图像变亮n=imadjust(a,L,0;0.5);%图像变暗g=255a%负片效果subplot(2,2,l);inishow(a);titleC原图像*)subplot(2,2,2);imshow(m)jitleC图像变亮)Subplot(2,2,3);imshow(n)图像变暗)subpiot(2,2,4);iinshow(g);titie(A片效果)原图像图像变亮4、熟悉数字图像处理常用函数的使用,调出帮助文档查看其各种不同用
8、法。方法:选择函数(函数所在区变喑),点右键弹出菜单,,HelponSelectionM五、实验总结分析图像的代数运算结果,分别陈述图像的加、减、乘、除运算可能的应用领域。实验四常用图像增强方法一、实验目的1、熟悉并掌握MATLAB图像处理工具箱的使用;2、理解并掌握常用的图像的增强技术。二、实验环境MATLAB6.5以上版本、WINXP或WIN2000计算机三、相关知识5 imnoiseimnoise函数用于对图像生成模拟噪声,如:i=imread(,e:wOl.tif);)二防口。6。,力日1人匕壮,0,0,02);模拟均值为0方差为0.02的高斯噪声,j=imnoise(iz,saltp
9、epper,20.04)模拟叠加密度为0.04的椒盐噪声6 fspecialfspec(5)函数用于产生预定义滤波器,如:h=fspecial(sober)j%sobel水平边缘增强滤波器h=fspecial(,gaussian)j%高斯低通滤波器h=fspecial(l叩IaCian)%拉普拉斯滤波器h=fspecial(log)%高斯拉普拉斯(LoG)滤波器h=fspecial(average,)j%均值滤波器3基于卷积的图像滤波函数imflite函数,filte2函数,二维卷积COnV2滤波,都可用于图像滤波,用法类似,如:i=imread(e:w01.tif);h=l,2,l;0,0,
10、0;l,-2,I;%产生SObel算子的水平方向模板j=filter2(h,i);或者:h=fspecial(,prewitt,)I=imread(cameraman.tif,);imshow(I);H=fspecial(,prewitt*);%预定义滤波器M=imfilter(I,H);Imshow(M)或者:i=imread(,e:wOl.tif);h=h/9;j=conv2(izh);4其他常用滤波举例(1)中值滤波medfilt2函数用于图像的中值滤波,如:i=imread(e:wOl.tif);j=medfilt2(izMN);对矩阵i进行二维中值滤波,领域为M*N,缺省值为3*3(
11、2)利用拉氏算子锐化图像,如:i=imread(,e:wOl.tif);j=double(i);h=0zl,0jlz-4z0j0zlz0j%拉氏算子k=conv2(jzhsame,);三、实验步骤1、采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波,窗口分别采用3*3,5*5,7*7I=imread(,fena.png,);J=imnoise(Isalt&pepperzO.O4);KI=medfilt2(Jz33);%对矩阵i进行二维中值滤波,领域为3*3K2=medfilt2(Jz55);K3=medfilt2(Jz77);5岫-1。1:(2z2,l)o1715110MVo);
12、坟心(椒盐噪声干扰图像)SUbPlOt(2,2,2,Jimshow(KI)JtitIeCW3*3二维中值滤波)subplot(2z2z3,jimshow(K2,;title(领域为5*5二维中值滤波SUbPlot(2,2,4);imshow(K3);title(领域为7*7二维中值滤波)领域为于3二维中值滤波2、采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波椒盐噪声干扰图像I=imread(fena.png,);领域为5节二维中值滤领域为7*7二维中值滤声,M=filter2(fspecial(average,z9)zJ)255;%模板尺寸为9subplot(2J,l);
13、imshow(j)Jtitle噪声干扰图像)subplo0时此球形结构元素由一系列空间线段结构元素来近似。SE=STRELcdiamOndzR)创建一个指定大小R平面钻石形状的结构化元素。R是从结构化元素原点到其点的距离,必须为非负整数。SE=STRELCdisk,R,N)创建一个指定半径R的平面圆盘形的结构元素。这里R必须是非负整数.N须是0,4,6,8,当N大于0时,圆盘形结构元素由一组N(或N+2)个周期线结构元素来近似。当N等于0时,不使用近似,即结构元素的所有像素是由到中心像素距离小于等于R的像素组成。N可以被忽略,此时缺省值是4。注:形态学操作在N0情况下要快于N=O的情形。如:S
14、ei=strel(,square*,II)%11乘以11的正方形IOimerode腐蚀图像用法:IM2=Imerode(IMzSE)腐蚀灰度、二进制或压缩二进制图像IM,返回腐蚀图像IM20参数SE是函数Strel返回的一个结构元素体或是结构元素体阵列。如:使用一个盘状结构元素腐蚀一幅二进制图像。OriginaIBW=imread(,circles,png);se=strel(,disk,zl);erodedBW=imerode(originalBWzse);imshow(originalBW)zfigure,imshow(erodedBW)Ilimdilate膨胀图像用法:IM2=imdil
15、ate(IMzSE)膨胀灰度图像、二值图像、或者打包的二值图像IM,返回膨胀图像M2。变量SE是一个结构元素或者一个结构元素的数组,其是通过Strel函数返回的。如:利用一个运行结构元素膨胀灰度图像。I=imread(,cameraman.tif);Se=strel(baH,z5z5);12=imdilate(Izse);imshow(I)ztitle(,Originar)figure,imshow(I2)ztitle(,Dilated1)三、实验步骤1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。i=imread(,f.jpg,)I=rgb2gray(s)I=im2double(I
16、);%模拟运动模糊1.EN=21;THETA=11;PSF=fspedalCmotion;LENzTHETA);blurred=imfilter(I,PSF7,conv,zcircular*);%恢复图像wnr2=deconvwnr(blurredzPSF);subplot(l,2zl);imshow(blurred);titleC运动模糊图像)subplot(lz2z2)jimshow(wnr2)jtitle(bKMffl,)运动模糊图像恢复图像2、采用三种不同算子检测图像边缘,显示结果。i=imread(f:l.jpgOBWl=edge(Iprewitt,);BW2=edge(Iz,zer
17、ocross,);BW3=edge(Icanny,);subplot(2,2,l);imshow(i);title(原图像)subplot(2z2z2)Jimshow(BWI)jtitle(prewitt边缘图)subplot(2z2z3);imshow(BW2);title(zerocross边缘图)subplot(2z2z4);imshow(BW3)jtitle(,canny边缘图)原图像prewitt 边缘zerocross 边缘canny边缘3、对二值图像分别进行方形模板3*3和5*5的膨胀和腐蚀操作,显示结果。a=imread(,f.jpg,)i=rgb2gray(a)I=ir2bw
18、(a,0.5)se3=strel(,disk,z3);erodedBWI=imerode(Izse3);se4=strel(,disk,5);erodedBW2=imerode(Izse4);sei=strel(,baH,z3z3);Il=imdilate(a,sel);se2=strel(,bairz5,5);12=imdilate(a,se2);subplot(22zl);Imshow(II);title(*3*3膨胀图像)subplot(2,2z2);imshow(I2);title(5*5膨胀图像jsubplot(2z2z3);imshow(erodedBWI);title(3*3腐蚀
19、图像)subplot(2z2z4);imshow(erodedBW2);title(5*5腐蚀图像53叼膨胀图像3叼腐蚀图像5节膨胀图 像5*5腐蚀图 像实验六图像处理实际应用一、实验目的1、熟悉并掌握MATLAB图像处理工具箱的使用;2、理解并掌握常用的图像处理技术。二、实验环境MATLAB6.5以上版本、WINXP或WIN2000计算机三、实验内容调试运行下列程序,分析程序,对每条语句给出注释,并显示最终执行结果。总结算法思想及优缺点.I=imread(,Car.jpg);y,x,z=size(D;myl=double(I);%RGBtoHSI%tic%Y方向%Blue_y=zeros(y
20、,1);fori=l:yforj=kxif(myl(i,j,1)=30)&(myl(i,j,2)=51)&(myl(i,j,3)=119)%蓝色RGB的灰度范围Blue_y(i,1)=Blue_y(i,1)+1;endendendtempMaxY=max(Blue_y);%Y方向车牌区域确定PYl=MaxY;while(Blue_y(PYI,1)=5)&(PY11)PYl=PYl-I;endPY2=MaxY;while(Blue_y(PY2,!)=5)&(PY2y)PY2=PY2+1;endIY=I(PYkPY2,;%X方向%BlUe_x=ZeroS(1,x);forj=l:xfori=PYl
21、:PY2if(myl(i,j,1)=30)&(myl(ij,2)=51)&(myl(i,j,3)=119)Blue_x(l,j)=Blue_x(l,j)+l;endendendPX1=1;while(Blue_x(l,PXl)3)&(PXlx)PXl=PXI+1;endPX2r;while(Blue.x(l,PX2)PX1)PX2=PX2-1;endPXl二PX1-2;%对车牌区域的修正PX2=PX2+2;Plate=I(PYI:PY2,PXl-2:PX2(:);t=toc%读取计时淑做6%既缺缺缺瞰八虢%僦飞嬲虢figure,imshow(I);figure,plot(Blue_y);gri
22、dfigure,plot(Blue_x);gridfigure,imshow(IY);添加注释和改正后的程序:I=imread(fCarJpg);%读取图片y,x,z=size;给定图片大小myl=double;返回双精度值%RGBtoHSI%tic%计时开始方向%Blujy=zeios(y,1);%一列全零矩阵foii=l:y%给定I的范围forj=l:x%给定j的范围if(myI(ijJ)=30)&(myI(ij,2)=51)&(myI(ij,3)=l19)%蓝色RGB的灰度范围BkIe-y(i,l)=Blue_y(i,l)+l;%y矩阵力口一endendendtempMaxY=max(B
23、lue_y);%Y方向车牌区域确定PYI=MaXY;%y矩阵的最大元素While(BIUJy(PYIJ)=5)&(PY11)%确定蓝色RGBBlue_y所在位置PYI=PYI/;%对车牌区域的修正,向上调整endPY2=MaxY;%y矩阵的最大元素while(Blue_y(PY2?1)=5)&(PY2vy)%确定蓝色RGBB山e.y所在位置PY2=PY2+1;%对车牌区域的修正向下调整endIY=I(PY1:PY2,行的范围方向%Blue_x=zeros(1a);%一行全一矩阵foij=l:x%给定j的取值范围foti=PYl:PY2%给定1的取值范闱if(myl(ij,1)=30)&(myI
24、(ij,2)=51)&(myl(ij,3)=119)%调整I中的范围Blue_x(lj)=Blue_x(l,j)+1;%Blue.x的矩阵加一endendendPXl=1;%当PXl等于1时while(BlUjX(1,PX1)3)&(PX1x)%确定蓝色RGBBhe_x的位置PXI=PXl+1;%对车牌区域的修正向下调整endPX2=x;%当PX2等于X时while(Blue.x(1,PX2)PX1)%确定蓝色RGBBhie_x的位置PX2=PX2-L%对车牌区域的修正向下调整endPXl=PXl-2;%对车牌区域的修正PX2=PX2+2;%对车牌区域的修正Plate=I(PYl:PY2,PX
25、l-2:PX2,:);%矩阵行列的范围t=toc%读取计时%flgugimshowQ);%仓IJ建图像窗11,显示图像Ifigure,plot(Bhie_y);gnd%创建图像窗II,绘制Blue_y图像,画出网格线figure,plot(Bhie_x);gnd%创建图像窗11,绘制Blue_x图像,画出网格线figure.imshow(Plate);%创建图像窗II,显示图像Plate0.5630504505010015020025030035040045050020实验二图像基本操作一、实验目的1、熟悉及掌握图像的采样原理,实现图像的采样过程,进行图像的灰度转换。2、理解直方图的概念及应用
26、,实现图像直方图的显示,及通过直方图均衡和直方图规定化方法对图像进行修正。二、实验环境MATLAB6.5以上版本、WINXP或WlN2000计算机三、相关函数图像的增强1、直方图imhist函数用于数字图像的直方图计算或显示,imhist(I,n)计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。如果I是二值图像,那么n仅有两个值。countsz=imhist(.)返回直方图数据向量Ce)UntS,相应的色彩值向量Xo如:i=imread(,e:w01.tif);imhist(i);2、直方图均衡化histeq函数用于数字图像的宜方图均衡化,J=histeq(Izn)均衡化后的级数
27、n,缺省值为64。J=histeqo,hgram)直方图规定化”,即将原是图象I的直方图变换成用户指定的向量hgram(即指定另一幅图像的直方图数据向量)。如:i=imread(e:w01.tif);j=histeq(i,N);对图像i执行均衡化,得到具有N个灰度级的灰度图像j,N缺省值为643、灰度调整imadjust函数用于数字图像的灰度或颜色调整,J=imadjust(I)将灰度图像I中的亮度值映射到J中的新值并使1%的数据是在低高强度和饱和,这增加了输出图像J的对比度值。J=imadjust(l,lowjn;highjn,low_out;high_out)将图像I中的亮度值映射到J中的
28、新值,即将Iowjn至highjn之间的值映射到IOW_oUt至high_。Ut之间的值。IoW_in以下与highjn以上的值被剪切掉了,也就是说,IoWjn以下的值映射到IoW_。Ut,highjn以上的值映射至Uhigh_outo它们都可以使用空的矩阵口,默认值是0lo如:i=imread(,e:w01.tif);j=imadjust(i,0,3,0,7,);将图像i转换为j,使灰度值从0.30.7与缺省值01相匹配运算函数1、ZeroS生成全0数组或矩阵如B=zeros(mzn)orB=zeros(mn)返回一个m*n全0矩阵2、取整函数floo最小取整函数round四舍五入取整函数c
29、eil最大取整函数如日=-1.9,-0.2,3.4,5.6z7,Oz2.4+3.61I=round(a)I = -2036 72+ 4i四、实验内容1、对一幅图像进行2倍、4倍、8倍和16倍减采样,显示结果。a=imread(,f7,jpg;b=rgb2gray(a);form=l:4figurewidthzheight=size(b);quartimage=zeros(floor(width(m)zfloor(height(2*m);k=l;n=l;fori=l:(m):widthforj=l:(2*m):heightquartimage(k,n)=b(ij);n=n+l;endk=k+l;
30、n=I;endimshow(uint8(quartimage);End2、显示一幅灰度图像a,改变图像亮度使其整体变暗得到图像b,显示两幅图像的直方图。a=imread(,fena-color.png*)c=rgb2gray(a)b=c-46subplot(2zIJ)Jmhist(C)Jtitle(,原图像)SUbPlot(2,1,2);imhist(b);titJe(变喑后的图像)3、对图像b进行直方图均衡化,显示结果图像和对应直方图。b=imread(f:lena_color.pngOc=rgb2gray(b)j=histeq(c)subplot(2z2zl)zimshow(c)subpl
31、ot(2z2z2)zimshow(j)subplot(2,2z3)zimhist(c)%显示原始图像直方图subplot(2z2z4)zimhist(j)%显示均衡化后图像的宜方图原始图像直方图均衡化后图像的直方图4、读入图像C,执行直方图规定化,使图像己的灰度分布与C大致相同,显示变换后图像及对应直方图。I=imread(fena.png,); J=histeq(I,64);t匀衡化成32个灰度级的直方图 countszx=imhist(J);%返回直方图图像向量COUntSb=imread(fl.jpg)Q=rgb2gray(b) M=histeq(Qzcounts);%将原始图像Q的直方
32、图变成指定向量counts figure, subplot(3z2zl)imshow(I); subplot(3z2z2),imshow(Q); subplot(3z2z3),imhist(I);subplot(3z2z4),imhist(Q) SUbPlot(3z2,5),imhist(J); SUbPlot(3z2,6),imhist(M);实验三图像变换一、实验目的1、熟悉及掌握图像的变换原理及性质,实现图像的傅里叶变换。二、实验环境MATLAB6.5以上版本、WINXP或WIN2000计算机三、相关函数图像的变换1 fft2fft2函数用于数字图像的二维傅立叶变换,如:i=imread
33、(,e:w01.tifj);j=fft2(i);由于MATLAB无法显示复数图像,因此变换后的结果还需进行求模运算,即调用abs函数。之后常常还进行对数变换,即调用IOg函数,以减缓傅里叶谱的快速衰减,更好地显示高频信息。2 ifft2ifft2函数用于数字图像的二维傅立叶反变换,如:i=imread(e:w01.tif,);k=ifft2(j);3 fftshift用于将变换后图像频谱中心从矩阵的原点移动到矩阵的中心B=fftshift(i)4利用fft2计算二维卷积利用fft2函数可以计算二维卷积,如:a=8,1,6;3,5,7;4,9,2;b=l,1,U;a(8,8)=0;b(8,8)=
34、0;c=ifft2(fft2(a).*fft2(b);c=c(1:5,1:5);利用COnV2(二维卷积函数)校验,如:a=8,1,6;3,5,7;4,9,21;1,U:c=conv2(a,b);四、实验内容1、对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。s=imread(T:IJpg);%读入原图像i=rgb2gray(s)i=double(i)j=fft2(i);%傅里叶变换k=fftshift(j);%直流分量移到频谱中心l=log(abs(k);%对数变换m=fftshi代(j);%直流分量移到频
35、谱中心RR=real(m);II=imag(m);%取傅里叶变换的实部取傅里叶变换的虚部A=sqrt(RR 2+II . 2);%计算频谱府幅值A=(A-min(min(八))(max(max(八))*255;%归一化b=circshift(s,800450);%对图像矩阵im中的数据进行移位操作b=rgb2gray(b)b=double(b)c=fft2(b);%傅里叶变换e=fftshift(c);%直流分量移到频谱中心I=log(abs(e);%对数变换f=fftshift(c);%直流分量移到频谱中心WW=real(f);%取傅里叶变换的实部BZZ=imag(f);%取傅里叶变换的虚部
36、B=sqrt(WW,人2+ZZ.B=(B-min(min(B)(max(max(B)*255;%归一花SUbPIOt(2,2,);imshow(s);title(原图像)SUbPlOt(2,2,2);imshow(uint8(b);title(平移图像)SUbPlot(2,2,3);imshow(八);title(离散傅里叶频谱)SUbPIOt(2,2,4);imshow(B);title(平移图像离散傅里叶频谱)原图像平移图像离散傅里叶频谱平移图像离散傅里叶频谱2、对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应
37、关系。s=imread(f:l.jpg);%读入原图像i=rgb2gray(s)i=double(i)k=fftshift(j);%傅里叶变换l=log(abs(k);%直流分量移到频谱中心m=fftshift(j);%对数变换RR=real(m);%直流分量移到频谱中心II=imag(m);%取傅里叶变换的实部A=Sqrt(RR,人2+II.2);%取傅里叶变换的虚部A=(A-min(min(八))(max(max(八))*255;%归一化b=imrotate(s,-90);%对图像矩阵im中的数据进行移位操作b=rgb2gray(b)b=double(b)c=fft2(b);e=fftshift(c);l=log(abs(e);f=fftshift(c);WW=real(f);ZZ=imag(f);B=sqrt(WW2+ZZ.人%傅里叶变换外直流分量移到频谱中心%对数变换%直流分量移到频谱中心%取傅里叶变换的实部B%取傅里叶变换的虚部B=(B-min(min(B)(max(max(B)*255;%归一化SUbPlOt(2,2,1);imshow(s);title(原图像)subplot(2,2z2)Jmshow(uint8(b);titleC平移图像)SUbPlOt(2,2,3);imshow(八);title