數(shù)字圖像處理-課程設(shè)計(jì)報(bào)告書_第1頁
數(shù)字圖像處理-課程設(shè)計(jì)報(bào)告書_第2頁
數(shù)字圖像處理-課程設(shè)計(jì)報(bào)告書_第3頁
數(shù)字圖像處理-課程設(shè)計(jì)報(bào)告書_第4頁
數(shù)字圖像處理-課程設(shè)計(jì)報(bào)告書_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

./電子科技大學(xué)數(shù)字圖像處理課程設(shè)計(jì)課題名稱數(shù)字圖像處理院〔系通信與信息工程學(xué)院專業(yè)通信工程姓名王亮森學(xué)號(hào)13起訖日期2015.11.27–2015.12.13指導(dǎo)教師王登位2015年12月15日目錄摘要:……………………03課題一:圖像的灰度級(jí)分辨率調(diào)整……………………04課題二:噪聲的疊加與頻域低通濾波器應(yīng)用………………………06課題三:頂帽變換在圖像陰影校正方面的應(yīng)用……………………13課題四:利用Hough變換檢測圖像中的直線……………………15課題五:圖像的閾值分割操作及區(qū)域?qū)傩浴?0課題六:基于MATLAB?的GUI程序設(shè)計(jì)……………………23結(jié)束語:……………………36參考文獻(xiàn):……………………37.基于MATLAB?的數(shù)字圖像處理課題設(shè)計(jì)摘要本文首先對(duì)數(shù)字圖像處理的相關(guān)定義、概念、算法與常用變換進(jìn)行了介紹;并通過七個(gè)課題實(shí)例,借助MATLAB?的圖像處理工具箱〔ComputerVisionSystemToolbox對(duì)這些案例逐一實(shí)現(xiàn),包括圖像的灰度值調(diào)整、圖像噪聲的疊加、頻域低通濾波器、閾值分割、Hough變換等,常用的圖像變化與處理;然后通過MATLAB?的GUI程序設(shè)計(jì),對(duì)部分功能進(jìn)行模塊化整合,設(shè)計(jì)出了數(shù)字圖像處理的簡易軟件;最后給出了軟件的幫助文件以及該簡易程序的系統(tǒng)結(jié)構(gòu)和m代碼。關(guān)鍵詞:灰度值調(diào)整噪聲圖像變換MATLAB?GUI設(shè)計(jì)課題一:圖像的灰度級(jí)分辨率調(diào)整設(shè)計(jì)要求:將圖像的灰度級(jí)分辨率調(diào)整至,并在同一個(gè)figure窗口上將它們顯示出來。設(shè)計(jì)思路:灰度級(jí)分辨率又稱色階,是指圖像中可分辨的灰度級(jí)的數(shù)目,它與存儲(chǔ)灰度級(jí)別所使用的數(shù)據(jù)類型有關(guān)。由于灰度級(jí)度量的是投射到傳感器上的光輻射值的強(qiáng)度,所以灰度級(jí)分辨率又稱為輻射計(jì)量分辨率。隨著圖像灰度級(jí)分辨率的的逐漸降低,圖像中所包含的顏色數(shù)目將變得越來越少,從而在顏色維度造成圖像信息量的退化。MATLAB?提供了histeq函數(shù)用于圖像灰度值的改變,調(diào)用格式如下:J=histeq<I,n>其中J為變換后的圖像,I為輸入圖像,n為變換的灰度值。依次改變n的值為128、64、32、16、8、4、2就可以得到灰度值分辨率為128、64、32、16、8、4、2的輸出圖像。利用MATLAB?的subplot命令可以將不同灰度的圖像放在同一個(gè)figure中方便對(duì)比。課題實(shí)現(xiàn):該思路的MATLAB?源代碼如下:in_photo=imread<'lena.bmp'>;%讀入圖片"lena.bmp",位置在matlab當(dāng)前工作區(qū)路徑下D:\TempProject\Matlab\Worksfori=[128,64,32,16,8,4,2]syms<['out_photo',num2str<i>]>;%利用for循環(huán)定義7個(gè)變量,作為不同灰度值分辨率的輸出變量eval<['out_photo',num2str<i>,'=histeq<in_photo,i>',';']>;%histeq函數(shù)用于改變圖像灰度值,用eval函數(shù)給變量循環(huán)賦值endfigure<>;set<figure<1>,'NumberTitle','off','Name','圖像的灰度級(jí)調(diào)整'>;%設(shè)置figure名稱subplot<2,4,1>;imshow<in_photo,[]>;title<'Orginal'>;subplot<2,4,2>;imshow<out_photo128,[]>;title<'Grayvalue128'>;subplot<2,4,3>;imshow<out_photo64,[]>;title<'Grayvalue64'>;subplot<2,4,4>;imshow<out_photo32,[]>;title<'Grayvalue32'>;subplot<2,4,5>;imshow<out_photo16,[]>;title<'Grayvalue16'>;subplot<2,4,6>;imshow<out_photo8,[]>;title<'Grayvalue8'>;subplot<2,4,7>;imshow<out_photo4,[]>;title<'Grayvalue4'>;subplot<2,4,8>;imshow<out_photo2,[]>;title<'Grayvalue2'>;%輸出所有圖形程序運(yùn)行結(jié)果如下圖:可以看出原圖lena.bmp被轉(zhuǎn)化為灰度值分辨率不同的7個(gè)圖像。課題二:噪聲的疊加與頻域低通濾波器應(yīng)用設(shè)計(jì)要求:往圖像中疊加不同類型的噪聲,并設(shè)計(jì)一個(gè)頻域低通濾波器來去除之。設(shè)計(jì)思路:噪聲疊加:首先需要在輸入圖片中疊加不同類型的噪聲。MATLAB?提供了imnoise函數(shù)用于在圖像中加入噪聲,調(diào)用格式如下:J=imnoise<I,type>J為疊加噪聲后的圖像,I為輸入圖像,type分為:'gaussian'<Gaussianwhitenoisewithconstantmeanandvariance>;'localvar'<Zero-meanGaussianwhitenoisewithanintensity-dependentvariance>;'poisson'<Poissonnoise>;'salt&pepper'<Onandoffpixels>;'speckle'<Multiplicativenoise>.二、低通頻域?yàn)V波器算法原理空間域?yàn)V波和頻率域?yàn)V波的基礎(chǔ)都是卷積定理,這說明兩個(gè)空間函數(shù)的卷積可通過計(jì)算兩個(gè)傅里葉變換函數(shù)的乘積的逆變換得到;相反地,兩個(gè)空間函數(shù)的卷積的傅里葉變換恰好等于兩個(gè)函數(shù)傅里葉變換的乘積。然而對(duì)于數(shù)字圖像僅當(dāng)f〔x,y和h〔x,y正確經(jīng)過零填充后,表達(dá)式才嚴(yán)格有效。故在進(jìn)行傅里葉變換前需先進(jìn)行填零操作。經(jīng)過上述分析,可得到傅里葉變換的基本步驟:〔1計(jì)算填充參數(shù)〔2利用填充參數(shù)進(jìn)行傅里葉變換〔3根據(jù)type生成傳遞函數(shù)H〔x,y〔4傳遞函數(shù)與傅里葉變換相乘〔5取G的傅里葉逆變換實(shí)部常見的低通頻域?yàn)V波器有三種,分別為:理想低通濾波器,n階巴特沃茨低通濾波器和高斯低通濾波器。三、低通頻域?yàn)V波器在Matlab?中的實(shí)現(xiàn)結(jié)合傅里葉變換基本步驟和函數(shù)dftuv<M,N>,在Matlab中實(shí)現(xiàn)低通頻域?yàn)V波器的代碼如下:function[g,F]=lpfilter<f,type>%函數(shù)參數(shù):彩色圖像f,低通濾波類型type課題實(shí)現(xiàn):代碼分為三部分:1.用來實(shí)現(xiàn)二維數(shù)組的meshgrid表示的函數(shù)dftuv.m;2.低通濾波器lpfilter.m;3.主函數(shù)///codebeginfunction[U,Y]=dftuv<X,N>%dftuv〔M,N來實(shí)現(xiàn)二維數(shù)組的meshgrid表示u=0:<X-1>;w=0:<N-1>;idx=find<u>X/2>;u<idx>=u<idx>-X;idy=find<w>N/2>;w<idy>=w<idy>-N;[Y,U]=meshgrid<w,u>;endfunction[g,F]=lpfilter<f,type>%函數(shù)參數(shù):彩色圖像f,低通濾波類型type%函數(shù)返回值:低通模糊圖像g,低通頻率圖像F%D0取填充后圖像寬度的5%%當(dāng)type為'ideal'時(shí),表理想低通濾波器%當(dāng)type為'btw'時(shí),表n階巴特低通沃茲濾波器%當(dāng)type為'gaussian'時(shí),表高斯低通濾波器f=im2double<f>;PQ=2*<size<f>>;%DFT之前補(bǔ)零F=fft2<f,PQ<1>,PQ<2>>;%-------------------[U,V]=dftuv<PQ<1>,PQ<2>>;D=sqrt<U.^2+V.^2>;%采用歐氏距離D0=0.05*PQ<2>;%設(shè)定距離初值n=5;switch<type>case'ideal'H=double<D<=D0>;case'btw'H=1./<1+<D./D0>.^<2*n>>;case'gaussian'H=exp<-<D.^2>./<2*<D0^2>>>;otherwiseerror<'Unknownfiltertype.'>;end%-------------------G=H.*F;g=real<ifft2<G>>;%得到新圖像g=g<1:size<f,1>,1:size<f,2>>;%矩形修剪為初始大小endOriginal=imread<'bank.bmp'>;X1=imnoise<Original,'salt&pepper'>;%疊加椒鹽噪聲X2=imnoise<Original,'gaussian',0,0.1>;%疊加高斯噪聲X3=imnoise<Original,'poisson'>;%疊加poisson噪聲X4=imnoise<Original,'speckle'>;%疊加speckle噪聲[g1,~]=lpfilter<X1,'gaussian'>;%lowpass-filter函數(shù),低通濾波[g2,~]=lpfilter<X1,'btw'>;[g3,~]=lpfilter<X1,'ideal'>;[h1,~]=lpfilter<X2,'gaussian'>;[h2,~]=lpfilter<X2,'btw'>;[h3,~]=lpfilter<X2,'ideal'>;[i1,~]=lpfilter<X3,'gaussian'>;[i2,~]=lpfilter<X3,'btw'>;[i3,~]=lpfilter<X3,'ideal'>;[j1,~]=lpfilter<X4,'gaussian'>;[j2,~]=lpfilter<X4,'btw'>;[j3,F]=lpfilter<X4,'ideal'>;figure,imshow<Original>%顯示原始圖像set<figure<1>,'NumberTitle','off','Name','Original'>;figure;%高斯低通濾波器濾波后的圖像set<figure<2>,'NumberTitle','off','Name','Noise&gaussian-filter'>;subplot<2,4,1>;imshow<X1,[]>;title<'salt&peppernoise'>;subplot<2,4,2>;imshow<X2,[]>;title<'gaussiannoise'>;subplot<2,4,3>;imshow<X3,[]>;title<'poissonnoise'>;subplot<2,4,4>;imshow<X4,[]>;title<'specklenoise'>;subplot<2,4,5>;imshow<g1,[]>;title<'lowpass-gaussian'>;subplot<2,4,6>;imshow<h1,[]>;title<'lowpass-gaussian'>;subplot<2,4,7>;imshow<i1,[]>;title<'lowpass-gaussian'>;subplot<2,4,8>;imshow<j1,[]>;title<'lowpass-gaussian'>;figure;%巴特沃茲低通濾波器濾波后的圖像set<figure<3>,'NumberTitle','off','Name','Noise&btw-filter'>;subplot<2,4,1>;imshow<X1,[]>;title<'salt&peppernoise'>;subplot<2,4,2>;imshow<X2,[]>;title<'gaussiannoise'>;subplot<2,4,3>;imshow<X3,[]>;title<'poissonnoise'>;subplot<2,4,4>;imshow<X4,[]>;title<'specklenoise'>;subplot<2,4,5>;imshow<g2,[]>;title<'lowpass-btw'>;subplot<2,4,6>;imshow<h2,[]>;title<'lowpass-btw'>;subplot<2,4,7>;imshow<i2,[]>;title<'lowpass-btw'>;subplot<2,4,8>;imshow<j2,[]>;title<'lowpass-btw'>;figure;%理想低通濾波器濾波后的圖像set<figure<4>,'NumberTitle','off','Name','Noise&ideal-filter'>;subplot<2,4,1>;imshow<X1,[]>;title<'salt&peppernoise'>;subplot<2,4,2>;imshow<X2,[]>;title<'gaussiannoise'>;subplot<2,4,3>;imshow<X3,[]>;title<'poissonnoise'>;subplot<2,4,4>;imshow<X4,[]>;title<'specklenoise'>;subplot<2,4,5>;imshow<g3,[]>;title<'lowpass-ideal'>;subplot<2,4,6>;imshow<h3,[]>;title<'lowpass-ideal'>;subplot<2,4,7>;imshow<i3,[]>;title<'lowpass-ideal'>;subplot<2,4,8>;imshow<j3,[]>;title<'lowpass-ideal'>;///codeend程序運(yùn)行結(jié)果截圖:///原始圖像///高斯低通濾波器處理///巴特沃茨低通濾波器處理///理想低通濾波器處理課題三:頂帽變換在圖像陰影校正方面的應(yīng)用設(shè)計(jì)要求:舉例說明頂帽變換在圖像陰影校正方面的應(yīng)用?!苍磮D像為"rice.bmp"。設(shè)計(jì)思路:當(dāng)一幅圖像具有大幅的背景的時(shí)候,而微小物品比較有規(guī)律的情況下,可以使用頂帽運(yùn)算進(jìn)行背景提取。比如,matlab自帶的rice.png;在這幅圖像中,可以看到光照不是很均勻,這樣的圖像如果轉(zhuǎn)換稱二值圖像的時(shí)候,就會(huì)有一個(gè)問題:變換的時(shí)候,由于背景光不同,導(dǎo)致了轉(zhuǎn)換的時(shí)候有些暗背景的地方出現(xiàn)了丟失現(xiàn)象。使用頂帽變換,可以很好地解決這個(gè)問題。頂帽變化是從原有的圖像中減去開運(yùn)算后的圖像。涉及到函數(shù)有imtophatimopenimsubtract.Imsubtract用于圖像相減,調(diào)用格式為:Z=imsubtract<X,Y>Imtophat用于圖像頂帽變換,調(diào)用格式:IM2=imtophat<IM,SE>適用圍:適合于大片背景的提??;局限:背景需要有大圍的,細(xì)節(jié)比較有規(guī)律的才行課題實(shí)現(xiàn):代碼如下:///codebeginIM=imread<'rice.png'>;imshow<IM>;title<'原圖'>;figure;se=strel<'disk',10>;%創(chuàng)建一個(gè)10*10的disk類型的結(jié)構(gòu)元素seIM2=imtophat<IM,se>;%頂帽變換imshow<IM2>;title<'頂帽變換后'>;///codeend程序運(yùn)行結(jié)果如下:課題四:利用Hough變換檢測圖像中的直線設(shè)計(jì)要求:利用Hough變換來檢測圖像中的直線,與變換過程相關(guān)的系列約束條件〔線段的最小長度等可自行疊加?!苍磮D像為"bank.bmp"。設(shè)計(jì)思路:Hough變換是利用圖像全局特性而將邊緣像素連接起來組成區(qū)域封閉邊界的一種方法。在預(yù)先知道區(qū)域形狀的條件下,利用Hough變換可以方便的得到邊界曲線而將不連續(xù)的像素邊緣點(diǎn)連接起來。Hough變換的主要優(yōu)點(diǎn)是受噪聲和曲線間斷的影響小。利用Hough變換可以直接檢測某些已知形狀的目標(biāo),如直線。Hough變換的基本思想是點(diǎn)線的對(duì)偶性。一方面,圖像空間中共線的點(diǎn)對(duì)應(yīng)在參數(shù)空間里相交的線;另一方面,在參數(shù)空間中相交于同一個(gè)點(diǎn)的所有直線在圖像空間里都有共線的點(diǎn)與之對(duì)應(yīng)。因此Hough變換把在圖像空間中的直線檢測問題轉(zhuǎn)換到參數(shù)空間中對(duì)點(diǎn)的檢測問題,通過在參數(shù)空間里進(jìn)行簡單的累加統(tǒng)計(jì)完成檢測任務(wù)。如果參數(shù)空間中使用直線方程,當(dāng)圖像空間直線斜率為無窮大時(shí),會(huì)使累加器尺寸和變很大,從而使計(jì)算復(fù)雜度過大。為解決這一問題,采用直線極坐標(biāo)方程,變換方程如圖1所示。ρ=xcosθ+ysinθ根據(jù)這個(gè)方程,原圖像空間中的點(diǎn)對(duì)應(yīng)新參數(shù)空間中的一條正弦曲線,即點(diǎn)-正弦曲線對(duì)偶。檢測直線的具體過程就是讓?duì)热”榭赡艿闹?然后計(jì)算ρ的值,再根據(jù)θ和ρ的值對(duì)累加數(shù)組累加,從而得到共線點(diǎn)的個(gè)數(shù)。利用Hough變換檢測圖像中直線的一般步驟應(yīng)該首先對(duì)圖像進(jìn)行二值化,然后進(jìn)行邊緣檢測,接著對(duì)邊緣檢測的結(jié)果作Hough變換,最后得到直線檢測結(jié)果。為了簡便,算法主要針對(duì)圖像的Hough變換,所以輸入圖像采用二值邊緣圖,具體算法步驟如下:<1>讀入一幅256級(jí)灰度圖<2>根據(jù)圖像尺寸決定Hough變換累加器的大小并分配存。<3>對(duì)圖像作Hough變換,并將變換結(jié)果存入Hough變換累加器。<4>設(shè)定閾值,并根據(jù)閾值大小將Hough變換累加器中累加值小于閾值的點(diǎn)清零,即認(rèn)為這些點(diǎn)并不對(duì)應(yīng)圖像域中的一條直線。<5>查找Hough變換累加器中累加值最大的點(diǎn),記錄該點(diǎn)并將其領(lǐng)域清零,繼續(xù)查找并記錄下一個(gè)累加值最大的點(diǎn),直到累加器中所有的累加值都為零,記錄的這些點(diǎn)即對(duì)應(yīng)了檢測到的圖像中的直線。<6>根據(jù)檢測到的點(diǎn)在圖像域中繪出直線。課題實(shí)現(xiàn):///codebeginclearallcloseallclcI=imread<'bank.bmp'>;BW=im2bw<I>;BW=edge<BW,'canny'>;%邊緣提取[H,T,R]=hough<BW>;imshow<H,[],'XData',T,'YData',R,...'InitialMagnification','fit'>;xlabel<'\theta'>,ylabel<'\rho'>;axison,axisnormal,holdon;P=houghpeaks<H,10,'threshold',ceil<0.3*max<H<:>>>>;x=T<P<:,2>>;y=R<P<:,1>>;plot<x,y,'s','color','white'>;lines=houghlines<BW,T,R,P,'FillGap',5,'MinLength',7>;figure,imshow<BW>,holdonmax_len=0;fork=1:length<lines>xy=[lines<k>.point1;lines<k>.point2];plot<xy<:,1>,xy<:,2>,'LineWidth',2,'Color','green'>;%Plotbeginningsandendsoflinesplot<xy<1,1>,xy<1,2>,'x','LineWidth',2,'Color','yellow'>;plot<xy<2,1>,xy<2,2>,'x','LineWidth',2,'Color','red'>;%Determinetheendpointsofthelongestlinesegmentlen=norm<lines<k>.point1-lines<k>.point2>;Len<k>=lenif<len>max_len>max_len=lenxy_long=xyendend%highlightthelongestlinesegmentplot<xy_long<:,1>,xy_long<:,2>,'LineWidth',2,'Color','blue'>;[L1Index1]=max<Len<:>>Len<Index1>=0[L2Index2]=max<Len<:>>x1=[lines<Index1>.point1<1>lines<Index1>.point2<1>]y1=[lines<Index1>.point1<2>lines<Index1>.point2<2>]x2=[lines<Index2>.point1<1>lines<Index2>.point2<1>]y2=[lines<Index2>.point1<2>lines<Index2>.point2<2>]K1=<lines<Index1>.point1<2>-lines<Index1>.point2<2>>/<lines<Index1>.point1<1>-lines<Index1>.point2<1>>K2=<lines<Index2>.point1<2>-lines<Index2>.point2<2>>/<lines<Index2>.point1<1>-lines<Index2>.point2<1>>holdon[m,n]=size<BW>;%尺寸BW1=zeros<m,n>;b1=y1<1>-K1*x1<1>b2=y2<1>-K2*x2<1>forx=1:nfory=1:mify==round<K1*x+b1>|y==round<K2*x+b2>BW1<y,x>=1;endendendforx=1:nfory=1:mifceil<K1*x+b1>==ceil<K2*x+b2>y1=round<K1*x+b1>BW1<1:y1-1,:>=0;endendendfigure,imshow<BW1>///codeend運(yùn)行結(jié)果:課題五:圖像的閾值分割操作及區(qū)域?qū)傩栽O(shè)計(jì)要求:對(duì)圖像執(zhí)行閾值分割操作并統(tǒng)計(jì)出每一個(gè)區(qū)域塊的屬性,然后,將每個(gè)區(qū)域的中心和外接矩形給標(biāo)注出來?!蔡崾荆喝绻指詈蟮膮^(qū)域塊數(shù)太多,建議采用Matlab下的bwareaopen函數(shù)來篩選掉一部分區(qū)域塊。設(shè)計(jì)思路:在對(duì)圖像的研究和應(yīng)用中,人們往往僅對(duì)圖像中的某些部分感興趣,這些部分一般稱為目標(biāo)或者前景;為了辨識(shí)和分析目標(biāo),需要將有關(guān)區(qū)域分離并提取出來,在此基礎(chǔ)上方可對(duì)目標(biāo)做進(jìn)一步利用,如特征提取和參數(shù)測量等;圖像分割就是指把圖像分解成若干個(gè)特定的、各具特性的區(qū)域并提取出感興趣目標(biāo)的技術(shù)和過程,其中的特性可以是灰度、顏色、紋理等,目標(biāo)可以對(duì)應(yīng)單個(gè)區(qū)域,也可以對(duì)應(yīng)多個(gè)區(qū)域。圖像分割后提取出的目標(biāo)可以應(yīng)用于圖像語義識(shí)別、圖像搜索等領(lǐng)域?;叶乳撝捣指罘ㄊ且环N最常用的并行區(qū)域技術(shù),它是圖像分割中應(yīng)用數(shù)量最多的一類。閾值分割方法實(shí)際上是輸入圖像f到輸出圖像g的如下變換:其中,T為閾值,取值為1的像素屬于〔前景目標(biāo),取值為0的像素屬于背景。課題實(shí)現(xiàn):使用Matlab?置的coins.png圖片,源代碼如下:///codebeginclc;clearall;fh=figure<'NumberTitle','off','Name','OTSU分割','Menubar','none','Color','w'>;ah=axes<'Parent',fh>;I=imread<'coins.png'>;level=graythresh<I>;%OTSU核心函數(shù)BW=im2bw<I,level>;%OTSU核心函數(shù)subplot<1,2,1>;imshow<I>;title<'輸入圖像'>;subplot<1,2,2>;imshow<BW>;title<'分割后圖像'>;%尋找不包括孔連通域的邊緣,并且把每個(gè)連通域的邊界描出來[B,L]=bwboundaries<BW,4>;figure;imshow<label2rgb<L,jet,[.5.5.5]>>holdonfork=1:length<B>boundary=B{k};plot<boundary<:,2>,boundary<:,1>,'w','LineWidth',2>end%找到每個(gè)連通域的質(zhì)心stats=regionprops<L,'Area','Centroid'>;%循環(huán)歷遍每個(gè)連通域的邊界fork=1:length<B>%獲取一條邊界上的所有點(diǎn)boundary=B{k};centroid=stats<k>.Centroid;plot<centroid<1>,centroid<2>,'ko'>;%提取該連通域所對(duì)應(yīng)在二值圖像中的矩形區(qū)域goalboundary=boundary;s=min<goalboundary,[],1>;e=max<goalboundary,[],1>;%將目標(biāo)區(qū)域分別向兩側(cè)延伸7個(gè)像素rectangle<'Position',[s<2>s<1>e<2>-s<2>e<1>-s<1>],'EdgeColor','r','LineWidth',2>;end///codeend運(yùn)行結(jié)果:課題六:基于MATLAB?的GUI程序設(shè)計(jì)設(shè)計(jì)要求:設(shè)計(jì)一個(gè)簡易的MatlabGUI界面程序,要求其具有如下的功能:①打開與保存圖像時(shí)均打開文件名設(shè)置對(duì)話框;②當(dāng)下拉菜單中的條目被選中時(shí),列表框之中實(shí)時(shí)的記錄下當(dāng)前的選擇;③通過編輯框來實(shí)現(xiàn)相關(guān)參數(shù)的交互式輸入;④將輸入圖像及處理后結(jié)果顯示在相應(yīng)的坐標(biāo)軸之上;⑤含有工具欄和菜單欄,當(dāng)選擇其下的組件成分時(shí),要有相應(yīng)的圖像處理行為發(fā)生;⑥將figure窗口的"Name"屬性修改為自己的和學(xué)號(hào);⑦將所設(shè)計(jì)的GUI程序編譯為".exe"形式的可執(zhí)行文件。設(shè)計(jì)思路:首先明確GUI的功能:要求能改變輸入圖像的灰度值分辨率,并且給圖像疊加不同類型的噪聲。其中灰度值由于是固定的數(shù)值{256,128,64,32,16,8,4,2},故采用單選按鈕組進(jìn)行實(shí)現(xiàn)。噪聲疊加分為:高斯噪聲,椒鹽噪聲,speckle噪聲,分別置于菜單欄-處理-噪聲疊加的子菜單里;而這些噪聲函數(shù)的自定義參數(shù),則通過編輯框進(jìn)行交互式輸入。GUI程序打開的圖像,和輸出圖像要分別顯示在兩個(gè)不同的axes中。可以繪制一個(gè)圖像顯示面板,用靜態(tài)文本加注標(biāo)簽。下拉式菜單用于選擇D:\下的置圖片文件〔lena.bmp;bank.bmp;jet.bmp;rice.bmp……。所選擇的文件以及做出的圖像處理操作被實(shí)時(shí)的記錄在列表框里〔作為Logs。下拉式菜單處于圖像選擇面板,如下圖所示:列表框作為操作記錄器,效果如下圖:下面是GUIDE界面截圖,即控件布局圖:GUI程序中包含的所有對(duì)象展示如下:程序結(jié)構(gòu):打開圖片或內(nèi)置圖片選擇顯示打開圖片或內(nèi)置圖片選擇顯示圖像axes2顯示圖像axes1圖像圖像處理:確定確定實(shí)時(shí)實(shí)時(shí)操作記錄保存圖片保存圖片參數(shù)調(diào)節(jié)參數(shù)調(diào)節(jié)〔灰度值,M,V,d,v菜單結(jié)構(gòu):Root課題實(shí)現(xiàn):基于MATLAB?的GUI程序設(shè)計(jì)核心是回調(diào)函數(shù)〔callbackfunction的編寫。在此GUIDE自動(dòng)生成的代碼中添加回調(diào)函數(shù)如下:///codebeginfunctionvarargout=m6<varargin>gui_Singleton=1;gui_State=struct<'gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',m6_OpeningFcn,...'gui_OutputFcn',m6_OutputFcn,...'gui_LayoutFcn',[],...'gui_Callback',[]>;ifnargin&&ischar<varargin{1}>gui_State.gui_Callback=str2func<varargin{1}>;endifnargout[varargout{1:nargout}]=gui_mainfcn<gui_State,varargin{:}>;elsegui_mainfcn<gui_State,varargin{:}>;end%Endinitializationcode-DONOTEDIT%Executesjustbeforem6ismadevisible.functionm6_OpeningFcn<hObject,eventdata,handles,varargin>handles.output=hObject;guidata<hObject,handles>;%Outputsfromthisfunctionarereturnedtothecommandline.functionvarargout=m6_OutputFcn<hObject,eventdata,handles>varargout{1}=handles.output;%%菜單欄-文件-打開功能:打開圖像文件functionUntitled_2_Callback<hObject,eventdata,handles>globalim;%定義變量作為輸入圖像time_string=num2str<datestr<now,'yyyy-mm-dd-HH:MM:SS'>>;%時(shí)間串[filename,pathname]=uigetfile<{'*.*';'*.bmp';'*.tif';'*.png'},'選擇圖片'>;str=[pathnamefilename];im=imread<str>;%打開文件set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>打開圖片成功']>>;%將打開文件操作記錄與列表框〔logsaxes<handles.axes5>;imshow<im>;%%菜單欄-文件-保存功能:保存輸出圖片functionUntitled_3_Callback<hObject,eventdata,handles>globalBW;%定義變量作為輸出圖像time_string=num2str<datestr<now,'yyyy-mm-dd-HH:MM:SS'>>;[filename,pathname,filterindex]=uiputfile<{'*.bmp';'*.tif';'*.png'},'保存輸出圖片'>;iffilterindex==0return%如果取消操作,返回elsestr=[pathnamefilename];%合成路徑+文件名axes<handles.axes6>;%使用axes6輸出圖像imwrite<BW,str>;%寫入圖片信息,即保存圖片set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>圖片已保存']>>;%將文件保存成功的信息記錄與〔logend%%菜單欄-文件-退出功能:退出GUIfunctionUntitled_5_Callback<hObject,eventdata,handles>clc;clearall;close<gcf>;%Executesonselectionchangeinpopupmenu3.%下拉式菜單功能:置圖片選擇functionpopupmenu3_Callback<hObject,eventdata,handles>contents=cellstr<get<hObject,'string'>>;time_string=num2str<datestr<now,'yyyy-mm-dd-HH:MM:SS'>>;item_index=get<hObject,'value'>;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>',contents{item_index}]>>;%實(shí)時(shí)的記錄當(dāng)前選擇的圖片globalim;val=get<hObject,'Value'>;switchcontents{val}case'lena.bmp'im=imread<'D:\lena.bmp'>;%置圖片放在D盤根目錄下axes<handles.axes5>;imshow<im>;case'bank.bmp'im=imread<'D:\bank.bmp'>;axes<handles.axes5>;imshow<im>;case'jet.bmp'im=imread<'D:\jet.bmp'>;axes<handles.axes5>;imshow<im>;case'rice.bmp'im=imread<'D:\rice.bmp'>;axes<handles.axes5>;imshow<im>;case'camera.bmp'im=imread<'D:\camera.bmp'>;axes<handles.axes5>;imshow<im>;end%操作面板-確定功能:在輸出圖像坐標(biāo)系〔axes6中顯示圖像functionpushbutton3_Callback<hObject,eventdata,handles>globalBW;axes<handles.axes6>;imshow<BW>;%%菜單欄-幫助-關(guān)于功能:作者信息functionUntitled_8_Callback<hObject,eventdata,handles>hObject=msgbox<{'電子科技大學(xué)';'通信與信息工程學(xué)院';'王亮森';'13'},'關(guān)于作者','none','non-modal'>;ht=findobj<hObject,'Type','text'>;set<ht,'FontSize',12,'Unit','normal'>;set<hObject,'Position',[200200150150]>;%固定窗口位置%%菜單欄-處理-灰度調(diào)整功能:調(diào)整輸入圖像的灰度functionUntitled_9_Callback<hObject,eventdata,handles>globalBW;globalim;globalx;%im=rgb2gray<im>;%若輸入圖像可能為彩色圖像加入im=rgb2gray<im>;BW=histeq<im,x>;%參數(shù)面板-灰度選擇功能:選擇所需灰度值functionuibuttongroup4_SelectionChangedFcn<hObject,eventdata,handles>globalx;%定義全局變量作為灰度值參數(shù)xx=2;%默認(rèn)調(diào)整至二值圖像time_string=num2str<datestr<now,'yyyy-mm-dd-HH:MM:SS'>>;switchget<eventdata.NewValue,'Tag'>case'radiobutton11'x=256;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>灰度選擇256']>>;%實(shí)時(shí)記錄下灰度值選擇case'radiobutton12'x=128;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>灰度選擇128']>>;case'radiobutton13'x=64;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>灰度選擇64']>>;case'radiobutton14'x=32;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>灰度選擇32']>>;case'radiobutton15'x=16;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>灰度選擇16']>>;case'radiobutton16'x=8;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>灰度選擇8']>>;case'radiobutton17'x=4;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>灰度選擇4']>>;case'radiobutton18'x=2;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>灰度選擇2']>>;end%%菜單欄-處理-gaussian噪聲疊加功能:疊加高斯噪聲functionUntitled_12_Callback<hObject,eventdata,handles>globalBW;globalim;globalM;globalV;%M,V為gaussian函數(shù)的參數(shù)time_string=num2str<datestr<now,'yyyy-mm-dd-HH:MM:SS'>>;M=str2num<get<handles.edit18,'String'>>;V=str2num<get<handles.edit19,'String'>>;%從編輯框傳遞參數(shù)M,V;BW=imnoise<im,'gaussian',M,V>;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>gaussian噪聲']>>;%實(shí)時(shí)記錄下處理類型%%菜單欄-處理-椒鹽噪聲疊加功能:疊加椒鹽噪聲functionUntitled_13_Callback<hObject,eventdata,handles>globalim;globalBW;globald;%d為椒鹽噪聲參數(shù)time_string=num2str<datestr<now,'yyyy-mm-dd-HH:MM:SS'>>;d=str2num<get<handles.edit20,'String'>>;%從參數(shù)編輯框傳遞參數(shù)BW=imnoise<im,'salt&pepper',d>;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>salt&pepper噪聲']>>;%%菜單欄-處理-speckle噪聲疊加功能:疊加speckle噪聲functionUntitled_14_Callback<hObject,eventdata,handles>globalim;globalBW;globalv;time_string=num2str<datestr<now,'yyyy-mm-dd-HH:MM:SS'>>;v=str2num<get<handles.edit21,'String'>>;BW=imnoise<im,'speckle',v>;set<handles.listbox3,'string',strvcat<get<handles.listbox3,'string'>,[time_string,'>>speckle噪聲']>>;%參數(shù)編輯框功能:傳遞speckle噪聲參數(shù)vfunctionedit21_Callback<hObject,eventdata,handles>globalv;v=str2num<get<hObject,'String'>>;if<isempty<v>>%輸入被嚴(yán)格限制,只能是數(shù)字set<hObject,'String','0.04'>;%v默認(rèn)值0.04end%參數(shù)編輯框功能:傳遞椒鹽噪聲參數(shù)dfunctionedit20_Callback<hObject,eventdata,handles>globald;d=str2num<get<hObject,'String'>>;if<isempty<d>>set<hObject,'String','0.05'>;%d默認(rèn)值0.05end%參數(shù)編輯框功能:傳遞高斯噪聲參數(shù)Vfunctionedit19_Callback<hObject,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論