数字图像处理-课程设计.doc
电子科技大学数字图像处理课程设计 课题名称 数字图像处理 院(系) 通信与信息工程学院 专 业 通信工程 姓 名 王亮森 学 号 3 起讫日期 015、1、2015、12、3 指导教师 王登位 215年1月日目 录摘要: 03课题一:图像得灰度级分辨率调整04课题二:噪声得叠加与频域低通滤波器应用6课题三:顶帽变换在图像阴影校正方面得应用13课题四:利用Hgh变换检测图像中得直线5课题五:图像得阈值分割操作及区域属性2课题六:基于ALAB®得GUI程序设计23结束语: 36参考文献: 7基于MTLB®得数字图像处理课题设计摘 要本文首先对数字图像处理得相关定义、概念、算法与常用变换进行了介绍;并通过七个课题实例,借助AB®得图像处理工具箱(pute Viio ystemToolbox)对这些案例逐一实现,包括图像得灰度值调整、图像噪声得叠加、频域低通滤波器、阈值分割、o变换等,常用得图像变化与处理;然后通过MT®得UI程序设计,对部分功能进行模块化整合,设计出了数字图像处理得简易软件;最后给出了软件得帮助文件以及该简易程序得系统结构与m代码.关键词:灰度值调整 噪声 图像变换 MATLAB® U设计课题一:图像得灰度级分辨率调整设计要求:将图像得灰度级分辨率调整至,并在同一个fiur窗口上将它们显示出来。设计思路:灰度级分辨率又称色阶,就是指图像中可分辨得灰度级得数目,它与存储灰度级别所使用得数据类型有关。由于灰度级度量得就是投射到传感器上得光辐射值得强度,所以灰度级分辨率又称为辐射计量分辨率.随着图像灰度级分辨率得得逐渐降低,图像中所包含得颜色数目将变得越来越少,从而在颜色维度造成图像信息量得退化。MATA®提供了hsq函数用于图像灰度值得改变,调用格式如下: =ist(I,n)其中J为变换后得图像,I为输入图像,n为变换得灰度值。依次改变得值为 18、64、32、16、8、4、 就可以得到灰度值分辨率为18、4、3、1、8、4、2得输出图像。利用MATLAB®得sublo命令可以将不同灰度得图像放在同一个figur中方便对比。课题实现:该思路得MATLA®源代码如下:_photo=imead(lena、bm');读入图片“le、bmp",位置在alab当前工作区路径下:TmpPojctMatlabWksori= 12,64,32,6,8,4,2 sym(ut_hoto,nm2sr(); %利用循环定义7个变量,作为不同灰度值分辨率得输出变量 val(outphto,nu2tr(i), =hsteq(_photo,i),;'); iseq函数用于改变图像灰度值,用eval函数给变量循环赋值endfgure();set(gure(),'NumberTitle,off,Name','图像得灰度级调整) ;设置figure名称subplot(2, 4, 1); imhow(n_poto,); itle(gna');subplt(, 4, 2); imsho(o_poo28,);title(Gay value 128);sublot(, 4, 3);imshow(ot_phoo64,);title(Gr vu );subplt(2, , 4);mshow(ototo32,);title(Gry vae32);subplo(2, 4, );isow(out_phto16,);tile(Gray val ');ubplt(2, 4, 6);imsho(ou_photo8,);title(Gry vaue 8');suplo(2, 4, );isho(outoo,);tt('Gray value 4);subplt(2, 4,);imsho(outpoto2,);tite('Gravalue ');%输出所有图形程序运行结果如下图:可以瞧出原图lena、bp被转化为灰度值分辨率不同得7个图像。课题二:噪声得叠加与频域低通滤波器应用设计要求:往图像中叠加不同类型得噪声,并设计一个频域低通滤波器来去除之。设计思路:一、 噪声叠加:首先需要在输入图片中叠加不同类型得噪声。MATLAB®提供了imnse函数用于在图像中加入噪声,调用格式如下:J imnoise(,ype)J为叠加噪声后得图像,I为输入图像,pe分为:gaussn(Gausi hi ie with constnmean andvariane);calar'(Zero-me Gasanwie nois it ntnsitydependentvaranc);poson'(Poissonoe);salt & epper'(On anoffpixls);speckle'(Mltlicativenose)、二、低通频域滤波器算法原理空间域滤波与频率域滤波得基础都就是卷积定理,这说明两个空间函数得卷积可通过计算两个傅里叶变换函数得乘积得逆变换得到;相反地,两个空间函数得卷积得傅里叶变换恰好等于两个函数傅里叶变换得乘积。然而对于数字图像仅当f(x,y) 与(x,) 正确经过零填充后, 表达式才严格有效。故在进行傅里叶变换前需先进行填零操作。经过上述分析, 可得到傅里叶变换得基本步骤:(1) 计算填充参数(2) 利用填充参数进行傅里叶变换(3) 根据ype 生成传递函数H(x,y)(4)传递函数与傅里叶变换相乘(5)取G 得傅里叶逆变换实部常见得低通频域滤波器有三种,分别为:理想低通滤波器,n阶巴特沃茨低通滤波器与高斯低通滤波器。三、低通频域滤波器在 Mab®中得实现结合傅里叶变换基本步骤与函数dftuv(M,),在 tlab中实现低通频域滤波器得代码如下:fucion g,F =lpfilte(f,tye)函数参数:彩色图像,低通滤波类型 p课题实现:代码分为三部分:1、用来实现二维数组得eshid 表示得函数dftv、m;2、低通滤波器piler、 ;3、主函数/odebeginnctinU, = dftv( X,N)%df (M,N)来实现二维数组得meshgrd 表示u=0:(X);w=:(1);ix=find(uX/2);u(idx)=u(dx)-;d=find(>/);(idy)=(idy);,U=meshgrid(w,u);dfunt g,F=lier(,typ)%函数参数:彩色图像f,低通滤波类型type函数返回值:低通模糊图像,低通频率图像F0 取填充后图像宽度得5当te为ide' 时,表理想低通滤波器当tye 为 btw 时,表 阶巴特低通沃兹滤波器当typ 为' gaussi 时,表高斯低通滤波器f=i2double(f);PQ=2(size(f);DT 之前补零F=t2(,PQ(1),PQ(2);%-U,V=dftuv(PQ(),PQ());D=st(U、2V、2); 采用欧氏距离D0=、5PQ(2);设定距离初值n=;stc()ca dea'Hdouble(D<=D);case、/(1+(D、/D0)、(2*n));ce gausia'H=ep(D、)、/(2*(D2));therwieeor('Unknwnfilter typ、);end-G=H、*F;=eal(if2(G);%得到新图像=g(1:se(f,1),1:sie(f,));矩形修剪为初始大小nOriinal = imre('nk、bmp);X inos(Original,st eper');%叠加椒盐噪声X2= imnoise(Origial,gassian,0,、1);%叠加高斯噪声X3 imoie(Oignal,poison);叠加poissn噪声4 = mnoi(Origna,'spekl);叠加sckle噪声g1, = lpfilter(X1,usin);lowpassfilt函数,低通滤波g2, = llt(X1,'bw);g3, = fler(X,idel');h1, = pfiler(X,gausian);h, = lpfiler(2,'bw);h3, = lflter(X2,'ie');i1, lpfilter(X3,'aussia);,= lfilter(X3,bw);i3, = lplter(X,idal);j1, = lpfilter(X4,gasian);j2,= lpflter(X4,t');j,F lpflter(,'dea);figre, imshow(Original)%显示原始图像se(figue(1),NmberTile',off',Nae,riginal) ;figure;%高斯低通滤波器滤波后得图像t(figur(2),NerTile,of','Name','Nose &aussiante) ;subplot(2, , 1);isow(1,);tile('salt & pper se');ubplot(, 4, 2);imsow(X2,); tile(gausin noise);subpot(2, 4, 3); imshow(X3,); title(poisn nise');sbl(2, 4, 4); msow(X,); title('peclene');subl(2,4, 5); imshow(g1,); title('wpss-sn);uplot(2, 4, 6); imhow(,); tle(lowpasgssian');sublot(2, , 7);msow(i,); title('lowpssgaussian);subplot(, 4, 8);imsow(j1,); til('lowpas-gausi);fgure;巴特沃兹低通滤波器滤波后得图像set(figure(3),'NumeTit,of,Nam,'Noi&btfilter);sublot(2, 4, 1); im(X1,); tite(slt eper oise);sulo(,4, );imsho(X2,); title('gassiani');subplot(2,4, 3);mshow(3,); tie('poisso noise);ubplo(, 4,); imow(X4,); tle('speclnise);suplot(2, , 5); imsh(,);title(lowpass-btw);subplot(2,, ); imsw(h2,);tte('lowpas-btw');subplot(2, 4,7);imhow(i2,);title('lopas-bw);subplo(, 4,);imshow(j2,);ite(opast');figure;理想低通滤波器滤波后得图像st(fiur(4),'Nubeie,off,'ame,Noise idelilter') ;sblot(2, 4, 1); imsho(X1,); ti(slt epr oise');subplot(2, 4, 2);msho(X2,);ttl(assin nise);suo(2, 4,3); imsow(X3,); te('poisson nois');subplot(2, , 4); imsho(X4,);tit(seckenise');suplot(2, 4,5); imow(,);title('lpasidal');sbplot(2, , ); imow(h,);itl(lowpassida);subplt(, 4, 7); ish(i3,); tile('lowpsidal');sublot(2,4, ); ims(j,); title('lpasidea);/de d程序运行结果截图:/原始图像/高斯低通滤波器处理/巴特沃茨低通滤波器处理/理想低通滤波器处理课题三:顶帽变换在图像阴影校正方面得应用设计要求:举例说明顶帽变换在图像阴影校正方面得应用。(源图像为“re、bmp”).设计思路:当一幅图像具有大幅得背景得时候,而微小物品比较有规律得情况下,可以使用顶帽运算进行背景提取.比如,mtlab自带得rie、png;在这幅图像中,可以瞧到光照不就是很均匀,这样得图像如果转换称二值图像得时候,就会有一个问题:变换得时候,由于背景光不同,导致了转换得时候有些暗背景得地方出现了丢失现象.使用顶帽变换,可以很好地解决这个问题。顶帽变化就是从原有得图像中减去开运算后得图像.涉及到函数有imopha iope iubtr、Imuract用于图像相减,调用格式为: = imubtact(X,Y)Imopha用于图像顶帽变换,调用格式:IM = itpha(IM,SE)适用范围:适合于大片背景得提取;局限:背景需要有大范围得,细节比较有规律得才行课题实现:代码如下:/odegnIM=imea(rce、pg);imshow(M);ttl('原图');figure;e=rl(dik,10); 创建一个10*得isk类型得结构元素sIM2 =iphat(IM,se); %顶帽变换msho(I2);tile('顶帽变换后');/de end程序运行结果如下:课题四:利用Houg变换检测图像中得直线设计要求:利用Houg变换来检测图像中得直线,与变换过程相关得系列约束条件(线段得最小长度等)可自行叠加。(源图像为“ban、bm”)。设计思路:Hugh变换就是利用图像全局特性而将边缘像素连接起来组成区域封闭边界得一种方法。在预先知道区域形状得条件下,利用Hogh变换可以方便得得到边界曲线而将不连续得像素边缘点连接起来。Houh变换得主要优点就是受噪声与曲线间断得影响小。利用Hogh变换可以直接检测某些已知形状得目标,如直线。 ough变换得基本思想就是点线得对偶性。一方面,图像空间中共线得点对应在参数空间里相交得线;另一方面,在参数空间中相交于同一个点得所有直线在图像空间里都有共线得点与之对应。因此Hogh变换把在图像空间中得直线检测问题转换到参数空间中对点得检测问题,通过在参数空间里进行简单得累加统计完成检测任务.如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加器尺寸与变很大,从而使计算复杂度过大.为解决这一问题,采用直线极坐标方程,变换方程如图所示.= c+yi根据这个方程,原图像空间中得点对应新参数空间中得一条正弦曲线,即点 正弦曲线对偶。检测直线得具体过程就就是让取遍可能得值,然后计算得值,再根据与得值对累加数组累加,从而得到共线点得个数。利用Hough变换检测图像中直线得一般步骤应该首先对图像进行二值化,然后进行边缘检测,接着对边缘检测得结果作Hough变换,最后得到直线检测结果.为了简便,算法主要针对图像得g变换,所以输入图像采用二值边缘图,具体算法步骤如下: (1)读入一幅256级灰度图(2)根据图像尺寸决定Hugh变换累加器得大小并分配内存。 (3)对图像作Hough变换,并将变换结果存入Hough变换累加器. ()设定阈值,并根据阈值大小将ouh变换累加器中累加值小于阈值得点清零,即认为这些点并不对应图像域中得一条直线。(5)查找Hh变换累加器中累加值最大得点,记录该点并将其领域清零,继续查找并记录下一个累加值最大得点,直到累加器中所有得累加值都为零,记录得这些点即对应了检测到得图像中得直线。 ()根据检测到得点在图像域中绘出直线.课题实现:/cod beilear allcosealcI=ime(bak、bmp);B=m2bw(I);W=ede(W,cany);%边缘提取H,T,R= hough(BW);ho(H,XData,,YDta',,、Initlacai,'f);lael(thta),ylabel(rh);xson, ais norm,l n;P houghpeak(H,10,threshod',cl(0、3*max(H(:)));x T(P(:,); =R(P(:,));lot(,y,s',coor,hite);lins = huglin(,T,,P,'FillGp,,ength',);figure,imho(BW),hol onmx_ln 0;fo = 1:length(lines)xy= line(k)、point1; n()、pit2;plo(y(:,1),xy(:,2),'ineWidh,Coor,ren);Plot beginninsan endo lnesplot(xy(1,1),x(1,2),'Led',2,Color,elw);plot(xy(2,),xy(2,2),x',LneWidth',2,'Cl',ed');trin th endpints f th lgs line segmenle =norm(lines(k)、ont1 ln(k)、point2);Len(k)=leni (len max_len)ma_le = lnxylng= xendd% ihihthe lonet neegmntplot(y_long(:,1),xong(:,2),LineWidth,2,Color','ble);L1 Iex1=max(e(:))Ln(nde1)=0L2Index2=ax(Len(:))1=lns(Inde1)、pint1()lie(ndex1)、poin2(1)y1=line(Index1)、pit(2) lnes(Ide1)、pint2(2)lns(Indx2)、pnt1(1)lin(Idx2)、poit2(1)y2=lnes(Ind2)、pnt1(2) lines(nde2)、ont2(2)K1=(lnes(ndx1)、point1(2)in(Indx)、poin(2)/(lines(Index)、point1(1)lines(Index)、pont2())K2(ines(Index)、poin1(2)lines(Inde2)、poit()/(line(Inex2)、poit1(1)lne(ndex)、in(1)hl onm,n = size(); 尺寸B1=zeos(m,n);1=y(1)-K1*x1(1)b2=y2()K2*2(1)fr =:nfory=1:mif round(K1*x1)y=rond(K2b)BW1(,x)=;eneddfr x=:nfor y=:mif cei(K1*x+b1)=cil(K*+b2)y=roud(*+b)BW1(:y1-1,:)=;edendendigure,imhow(BW1)/od运行结果:课题五:图像得阈值分割操作及区域属性设计要求:对图像执行阈值分割操作并统计出每一个区域块得属性,然后,将每个区域得中心与外接矩形给标注出来。(提示:如果分割后得区域块数太多,建议采用Mab下得bareapen函数来筛选掉一部分区域块)。设计思路:在对图像得研究与应用中,人们往往仅对图像中得某些部分感兴趣,这些部分一般称为目标或者前景;为了辨识与分析目标,需要将有关区域分离并提取出来,在此基础上方可对目标做进一步利用,如特征提取与参数测量等;图像分割就就是指把图像分解成若干个特定得、各具特性得区域并提取出感兴趣目标得技术与过程,其中得特性可以就是灰度、颜色、纹理等,目标可以对应单个区域,也可以对应多个区域.图像分割后提取出得目标可以应用于图像语义识别、图像搜索等领域.灰度阈值分割法就是一种最常用得并行区域技术,它就是图像分割中应用数量最多得一类。阈值分割方法实际上就是输入图像f到输出图像g得如下变换:其中,T为阈值,取值为1得像素属于(前景)目标,取值为0得像素属于背景。课题实现:使用Ml®内置得 ins、png图片,源代码如下:/cod egiclc;clerl;fh=figure('Numbeite,'off,'Name',TSU分割,eubar',none,Color,w);axe(aent',fh);I=imead(cs、pn);evel=raythreh();OTSU核心函数BW=im2bw(I,level);OTSU核心函数bplot(1,2,1);imhow(I);ile(输入图像);ubo(1,2);ishow(W);itl(分割后图像');%寻找不包括孔连通域得边缘,并且把每个连通域得边界描出来,L =bwboundari(W,);iur;ishw(laberb(L,jt,、5 、5 、5))l nfor k=1:legth(B)boundry =Bk;plo(bundary(:,2),boundary(:,1),w',ieWidt,)end 找到每个连通域得质心sts regonpop(L,'Area','Cnrd); 循环历遍每个连通域得边界for k=:lg(B)获取一条边界上得所有点bondary = k;cenoid = stats()、Centrid;po(centroid(1),croi(2),ko);% 提取该连通域所对应在二值图像中得矩形区域goalbouay = bunday;s mi(goalounday, , 1);= mx(goabounar, , 1);将目标区域分别向两侧延伸个像素ectangle(osin,s(2)s(1) e(2)-s(2) e()s(1),deColor,', 'LnWidt',2);end/ceend运行结果:课题六:基于MTL®得GUI程序设计设计要求:设计一个简易得Maab GI界面程序,要求其具有如下得功能:打开与保存图像时均打开文件名设置对话框;当下拉菜单中得条目被选中时,列表框之中实时得记录下当前得选择;通过编辑框来实现相关参数得交互式输入;将输入图像及处理后结果显示在相应得坐标轴之上;含有工具栏与菜单栏,当选择其下得组件成分时,要有相应得图像处理行为发生;将figure窗口得“ame"属性修改为自己得姓名与学号;将所设计得UI程序编译为“、exe"形式得可执行文件。设计思路:首先明确GUI得功能:要求能改变输入图像得灰度值分辨率,并且给图像叠加不同类型得噪声。其中灰度值由于就是固定得数值56,128,64,3,1,8,4,2,故采用单选按钮组进行实现.噪声叠加分为:高斯噪声,椒盐噪声,speckle噪声,分别置于 菜单栏-处理噪声叠加 得子菜单里;而这些噪声函数得自定义参数,则通过编辑框进行交互式输入.GUI程序打开得图像,与输出图像要分别显示在两个不同得axe中。可以绘制一个图像显示面板,用静态文本加注标签.下拉式菜单用于选择D:下得内置图片文件(len、p; bank、mp; jet、bp; rie、bm ).所选择得文件以及做出得图像处理操作被实时得记录在列表框里(作为ogs)。下拉式菜单处于图像选择面板,如下图所示:列表框作为操作记录器,效果如下图:下面就是GUIDE界面截图,即控件布局图:GUI程序中包含得所有对象展示如下: 程序结构:打开图片或内置图片选择显示图像axes2显示图像axes1图像处理:确定实时操作记录保存图片参数调节(灰度值, M, V, d, v)菜单结构:Root 课题实现:基于MATAB®得GUI程序设计核心就是回调函数(callback fcon)得编写。在此UIE自动生成得代码中添加回调函数如下:/co begnfuncin vrro =m6(varargi)i_iglton ;guitate =stct(gui_Nme', , 、 guiSngeo, gu_Sington, 、 ui_OpeningFcn, m6_peningFcn,、 'gui_utput', m6_Otptc, 、 'ui_LayoutFcn', , 、 ui_Callack', );if nargin &cr(vararn1) ui_Ste、gui_llbac=str2fc(vrargi1);ndif aout vgou:nargout =gi_mainfn(gui_Stae, vargi:);else gui_mafcn(ui_Stt, aran:);end Ed initiliationco DO NT IT - Execute ustbefore 6 s ade visl、functio m_peningFn(hObjet,ventdata, ndles,varargin)adle、tpu Obj;guidta(jt,handles);% - ututs from thisfunction rereturne to thmand line、uncion aragout = 6_Outputcn(hct,evendaa, handles) aargot1 =hands、utut; -%菜单栏-文件打开 功能:打开图像文件unction Unted2_llck(Objct, eetd, handles)gloa m;定义变量作为输入图像time_strng num2str(daetr(no,yyyym-dd-H:M:SS));%时间串= igetfil(、*;*、bmp';、tf';*、png,选择图片); str=pathname ;=imrea(t); 打开文件st(handes、libo,'trin',sat(get(ndles、liso3,trig),tie_string,> 打开图片成功');将打开文件操作记录与列表框(los)xes(hals、es5); mshow(im); % -菜单栏文件保存 功能:保存输出图片funtin Uite_3_Calback(hbjec, eentata, adls)lobal BW; %定义变量作为输出图像tm_strin= nmst(datestr(now,yyy-ddHH:MM:SS);=uipufle(、bmp;、tf';*、p',保存输出图片'); fileindex=0ret 如果取消操作,返回lser=pthnam; 合成路径+文件名axes(adls、ae); 使用axes6输出图像irie(W,str); %写入图片信息,即保存图片et(andles、listo3,'string,strvca(e(hnes、itox3,strng),timestrig,>> 图片已保存');%将文件保存成功得信息记录与(log)en%-%菜单栏文件退出功能:退出GUfunction Untied_5_Callback(t, eetata, ndles)clc;earall;ose(gf); - xcus on seletn cage popupmeu、下拉式菜单 功能:内置图片选择functi pumenu3_Calbak(ect,evnaa, handls)ntents cetr(g