第一篇:光學圖像處理實驗報告
光學圖像處理實驗報告
直方圖均衡化的研究
一、摘要
直方圖均衡化就是把一已知灰度概率分布的圖像經過一種變換,使之演變成一幅具有均勻灰度概率分布的新圖像。它是以累積分布函數變換法為基礎的直方圖修正法。分析和總結灰度直方圖的均衡化算法并通過VC++實驗驗證該方法能有效達到圖像增強的目的。對于較為暗淡的圖像,采用直方圖均衡化能夠增強其整體對比度,獲的較為理想的觀察效果。
二、關鍵字
灰度統計
直方圖
均衡化
三、實驗原理
1、直方圖的理論基礎:
(1)直方圖概念:灰度直方圖表示圖像中每種灰度出現的頻率。(2)直方圖的作用: 反映一幅圖像的灰度分布特性
n(3)直方圖的計算:
p(rk)?k0?rk?1k?0,1,2,?,l?1 n式中:nk為圖像中出現rk級灰度的像素數,n是圖像像素總數,而nk/n即為頻數。
2、設計目的: 產生一幅灰度級分布具有均勻概率密度的圖像,擴展像素取值的動態范圍,達到了圖象增強的目的。
3、直方圖均衡化的效果 :
1)變換后直方圖趨向平坦,灰級減少,灰度合并。
2)原始象含有象素數多的幾個灰級間隔被拉大了,壓縮的只是象素數少的幾個灰度級,實際視覺能夠接收的信息量大大地增強了,增加了圖象的反差。同時,也增加了圖象的可視粒度。
4、離散情況下的直方圖均衡化的算法:
A、列出原始圖像的灰度級 fj,j?0,1,?,L?1
B、統計各灰度級的像素數目 nj,j?0,1,?,L?1
C、計算原始圖像直方圖各灰度級的頻數 Pf(fj)?nj/n,j?0,1,?,L?1
kD、計算累積分布函數 C(f)?j?0Pf(fj),j?0,1,?,k,?L?1
F、應用以下公式計算映射后的輸出圖像的灰度級,P為輸出圖像灰度級的個數,其中INT為取整符號:
gi?INT[(gmax?gmin)C(f)?gmin?0.5] G、用的映射關系修改原始圖像的灰度級,從而獲得直方圖近似為均勻分布的輸出圖像。
?
四、實驗內容及源程序
1、灰度分布密度的統計 程序代碼如下:
/*********************************************** *函數名稱:ZhiFangTu(float *tongji)*函數類型:void *變量說明:tongji,灰度分布密度統計 *功能:對圖像進行灰度直方圖統計
***********************************************/ void CAAAView::OnZhifangtu(float *tongji){ // TODO: Add your command handler code here
int huidu[256];//灰度計數
CAAADoc* pDoc = GetDocument();
LPSTR lpDIB;LPSTR
lpDIBBits;
lpDIB =(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());
lpDIBBits = ::FindDIBBits(lpDIB);//原圖數據區指針
int iH,iW;memset(huidu,0,sizeof(huidu));//變量初始化
iH = ::DIBHeight(lpDIB);//寬
iW = ::DIBWidth(lpDIB);//長
LPBYTE temp1=new BYTE[iH*iW];//新圖像緩沖區
memcpy(temp1,lpDIBBits,iH*iW);//復制原圖像到緩沖區
for(int i=0;i { for(int j=0;j { unsigned char temp; temp=temp1[iW*i+j];//灰度統計計數 huidu[temp]++;} } for(i=0;i<256;i++)//統計灰度分布密度 tongji[i]=huidu[i]/(iH*iW*1.0f);} 2、直方圖分布的均衡化 (1)統計直方圖數組,用一個數組p記錄p?i?;(2)i從1開始,令s?i??s?i?1??p?i?; (3)一個數組L記錄新的s的索引值,即令L?i??s?i?*(256?1); (4)依次循環每個像素,取原圖的像素值作為數組L的下標值,取該下標值對應的數組值作為均衡化之后的像素值。程序代碼如下: /*********************************************** *函數名稱:zhifangtujunheng *函數類型:void *變量說明:無 *功能:對圖像進行灰度分布均衡化處理 ***********************************************/ void CAAAView::OnZhifangtujunheng(){ // TODO: Add your command handler code here CAAADoc* pDoc = GetDocument(); LPSTR lpDIB;LPSTR lpDIBBits; lpDIB =(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB()); lpDIBBits = ::FindDIBBits(lpDIB);//原圖數據區指針 float Hdmd[256];//灰度密度 float temp[256];//中間變量 int a[256];long i,j;memset(temp,0,sizeof(temp));//初始化 OnZhifangtu(Hdmd);//獲取圖像的灰度密度分布 for(i=0;i<256;i++)//進行均衡化處理 { if(i==0) { temp[0]=Hdmd[0]; } else { temp[i]=temp[i-1]+Hdmd[i]; } a[i]=(int)(255.0f*temp[i]+0.5f);} long iH,iW; iH = ::DIBHeight(lpDIB);//寬 iW = ::DIBWidth(lpDIB);//長 for(i=0;i { for(j=0;j { unsigned char temp1;//將轉換后的灰度分布寫入dib圖像 temp1=*(lpDIBBits+i*iW+j); *(lpDIBBits+i*iW+j)=a[temp1];} } pDoc->UpdateAllViews(NULL);::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());EndWaitCursor();} 五、實驗結果的分析與比較 a原圖如下所示: b均衡后的結果如下: 結論:圖像直方圖趨于平坦化,且灰度間隔被拉大,從而有利于圖像的分析和識別。對于較為暗淡的圖像,采用直方圖均衡化能夠增強其整體對比度,獲的較為理想的觀察效果。 六、參考文獻 VC++圖像處理程序設計(第二版)(楊淑瑩等 編著) JIANGSU UNIVERSITY OF TECHNOLOGY 數字信號處理實驗報告 學院名稱: 電氣信息工程學院 專 業: 班 級: 姓 名: 學 號: 指導老師: 張維璽(教授) 2013年12月20日 實驗一 離散時間信號的產生 一、實驗目的 數字信號處理系統中的信號都是以離散時間形態存在的,所以對離散時間信號的研究是數字信號的基本所在。而要研究離散時間信號,首先需要產生出各種離散時間信號。使用MATLAB軟件可以很方便地產生各種常見的離散時間信號,而且它還具有強大繪圖功能,便于用戶直觀地處理輸出結果。 通過本實驗,學生將學習如何用MATLAB產生一些常見的離散時間信號,實現信號的卷積運算,并通過MATLAB中的繪圖工具對產生的信號進行觀察,加深對常用離散信號和信號卷積和運算的理解。 二、實驗原理 離散時間信號是指在離散時刻才有定義的信號,簡稱離散信號,或者序列。離散序列通常用x(n)來表示,自變量必須是整數。常見的離散信號如下:(1)單位沖激序列δ(n) 如果δ(n)在時間軸上延遲了k個單位,得到δ(n-k),即長度為N的單位沖激序列δ(n)可以通過下面的MATLAB命令獲得。 n=-(N-1):N-1 x=[zeros(1,N-1)1 zeros(1,N-1)]; stem(n,x)延遲K個采樣點的長度為N的單位沖激序列δ(n-k)(k n=0:N-1 y=[zeros(1,M)1 zeros(1,N-M-1)]; stem(n,y) (2)單位階躍序列u(n) 如果u(n)在時間軸上延遲了k個單位,得到u(n-k),即長度為N的單位階躍序列u(n)可以通過下面的MATLAB命令獲得。 n=-(N-1):N-1 x=[zeros(1,N-1)ones(1,N)]; stem(n,x)延遲的單位階躍序列可以使用類似于單位沖激序列的方法獲得。(3)矩形序列 矩形序列有一個重要的參數,就是序列的寬度N。矩形序列與u(n)之間的關系為矩形序列等= u(n)— u(n-N)。 因此,用MATLAB表示矩形序列可利用上面的單位階躍序列組合而成。(4)正弦序列x(n) 這里,正弦序列的參數都是實數。與連續的正弦信號不同,正弦序列的自變量n必須為整數。可以證明,只有當2π/w為有理數時,正弦序列具有周期性。 長度為N的正弦序列x(n)可以通過下面的MATLAB命令獲得。n=0:N-1 x=A*cos(2*pi*f*n/Fs+phase)(5)單邊實指數序列x(n) 長度為N的實指數序列x(n)可以通過下面的MATLAB命令實現。n=0:N-1 x=a.^n stem(n,x)單邊指數序列n的取值范圍為n>=0。當|a|>1時,單邊指數序列發散;當|a|<1時,單邊指數序列收斂。當a>0時,該序列均取正值;當a<0時,序列在正負擺動。 (6)負指數序列x(n) 當a=0時,得到虛指數序列x(n)。 與連續負指數信號一樣,我們將負指數序列實部和虛部的波形分開討論,得到如下結論: 1)當a>0時,負指數序列x(n)的實部和虛部分別是按指數規律增長的正弦振蕩序列; 2)當a<0時,負指數序列x(n)的實部和虛部分別是按指數規律衰減的正弦振蕩序列; 3)當a=0時,負指數序列x(n)即為虛指數序列,其實部和虛部分別是等幅的正弦振蕩序列; 長度為N的實指數序列x(n)可以通過下面的MATLAB命令實現。n=0:N-1 x=exp((a.+j*w)*n)stem(n,real(x))或 stem(n,imag(x)) 三、實驗內容及分析 ?1n?01、編制程序產生單位沖激序列??n???“?并繪出其圖及??n?”學號后兩位0n?0?形。程序:(1)N=4; n=-(N-1):N-1; x=[zeros(1,N-1)1 zeros(1,N-1)];stem(n,x); title('單位沖激序列'); grid on; (2)N=6; M=1;%學號01 n=-(N-1):N-1; y=[zeros(1,N-M+1)1 zeros(1,N-M-1)];stem(n,y); title('單位沖激序列');grid on; 分析:在上圖的基礎上向右平移了1個單位。 ?1n?02、編制程序產生單位階躍序列u?n???、u?n?“學號后兩位”?及 0n?0?u?n??u?n?“學號后兩位”?,并繪出其圖形。程序: 4 (1)N=5; n=-(N-1):N-1; x=[zeros(1,N-1)ones(1,N)];stem(n,x); title('單位階躍序列');grid on; (2)N=6; M=1;%學號01 n=-(N-1):N-1; x=[zeros(1,N-M+1)ones(1,N-M)];stem(n,x); title('單位階躍序列');grid on; 分析:在上圖的基礎上平移了1個單位.(3)N=6; M=1;%學號01 n=-(N-1):N-1; x=[zeros(1,N-1)ones(1,N)];y=[zeros(1,N-M+1)ones(1,N-M)];z=x-y;stem(n,z); title('單位階躍序列');grid on; 2?? 3、編制程序產生正弦序列x?n??cos?2?n?、x?n??cos??n?及 ?學號后兩位?x?n??sin?2n?并繪出其圖形。 程序:(1)N=5; A=1; w=2*pi;phi=0;n=0:0.05:N-1;x=A*cos(w*n+phi);stem(n,x);title('余弦信號');grid on; 分析:該序列具有周期性,且輸出為余弦信號.(2)N=5; A=1; w=2*pi/1;%學號01 phi=0;n=0:0.05:N-1;x=A*cos(w*n+phi);stem(n,x);title('余弦信號');grid on; ; 分析:該序列具有周期性,且輸出為余弦信號.(3)N=5; A=1; w=2*pi;phi=0; n=0:0.05:N-1;x=A*sin(w*n+phi);stem(n,x);title('正弦信號');grid on; 分析:該序列具有周期性,且輸出為正弦信號.4、編制程序產生復正弦序列x?n??e(2?j學號后兩位)n,并繪出其圖形。N=3; n=0:0.2:N-1; w=1;%學號01 x=exp((2+j*w)*n);subplot(2,1,1) stem(n,real(x)),title('實部');grid on;subplot(2,1,2) stem(n,imag(x)),title('虛部');grid on; 5、編制程序產生指數序列x?n??an,并繪出其圖形。其中a=學號后兩位、a=1/“學號后兩位”。 (1)N=10; n=0:N-1; a=1;%學號01 x=a.^n;stem(n,x);title('指數序列');grid on; (2)N=10; n=0:N-1; a=1;%學號01 x=a.^(-n);stem(n,x);title('指數序列');grid on; 實驗三 離散時間信號的頻域分析 一、實驗目的 信號的頻域分析是信號處理中一種有效的工具。在離散信號的頻域分析中,通常將信號表示成單位采樣序列的線性組合,而在頻域中,將信號表示成復變量或的線性組合。通過這樣的表示,可以將時域的離散序列映射到頻域以便于進一步的處理。 在本實驗中,將學習利用MATLAB計算離散時間信號的DTFT和DFT,并加深對其相互關系的理解。 二、實驗原理 (1)DTFT和DFT的定義及其相互關系。 (2)使用到的MATLAB命令有基于DTFT離散時間信號分析函數以及求解序列的DFT函數。 三、實驗內容及分析 (1)編程計算并畫出下面DTFT的實部、虛部、幅度和相位譜。 X(e)?jw0.0518?0.1553e1?1.2828ex(n)?cos?jw?jw?0.1553e?j2w?1.0388e?j2w?0.0518e?j3w?0.3418e?j3w (2)計算32點序列 5?n16,0≦n≦31的32點和64點DFT,分別繪出幅度譜圖形,并繪出該序列的DTFT圖形。 3-1 clear; x=[0.0518,-0.1553,0.1553,0.0518];y=[1,1.2828,1.0388,0.3418];w=[0:500]*pi/500 H=freqz(x,y,w); magX=abs(H);angX=angle(H);realX=real(H);imagX=imag(H);subplot(221);plot(w/pi,magX);grid; xlabel('frequency in pi unit');ylabel('magnitude');title('幅度 part');axis([0 0.9 0 1.1]); subplot(223);plot(w/pi,angX);grid; xlabel('frequency in pi unit');ylabel('radians');title('相位 part');axis([0 1-3.2 3.2]); subplot(222);plot(w/pi,realX);grid; xlabel('frequency in pi unit');ylabel('real part');title('實部 part');axis([0 1-1 1]); subplot(224);plot(w/pi,imagX);grid; xlabel('frequency in pi unit');ylabel('imaginary');title('虛部 part');axis([0 1-1 1.1]); 3-2 N=32;n=0:N-1; xn=cos(5*pi*n/16);k=0:1:N-1;Xk=fft(xn,N);subplot(2,1,1);stem(n,xn);subplot(2,1,2);stem(k,abs(Xk));title('32點');figure N=64;n=0:N-1; xn=cos(5*pi*n/16);k=0:1:N-1;Xk=fft(xn,N);subplot(2,1,1);stem(n,xn);subplot(2,1,2);stem(k,abs(Xk));title('64點'); (1) (2) 實驗四 離散時間LTI系統的Z域分析 一、實驗目的 本實驗通過使用MATLAB函數對離散時間系統的一些特性進行仿真分析,以加深對離散時間系統的零極點、穩定性,頻率響應等概念的理解。學會運用MATLAB分析離散時間系統的系統函數的零極點;學會運用MATLAB分析系統函數的零極點分布與其時域特性的關系;學會運用MATLAB進行離散時間系統的頻率特性分析。 二、實驗原理 離散時間系統的系統函數定義為系統零狀態響應的Z變化與激勵的Z變化之比。 在MATLAB中系統函數的零極點可通過函數roots得到,也可借助函數tf2zp得到,tf2zp的語句格式為 [Z,P,K]=tf2zp(B,A)其中,B與A分別表示H(z)的分子與分母多項式的系數向量。它的作用是將H(z)的有理分式表示式轉換為零極點增益形式。 若要獲得系統函數H(z)的零極點分布圖,可直接應用zplane函數,其語句格式為 Zplane(B,A) 其中,B與A分別表示H(z)的分子和分母多項式的系數向量。它的作用是在z平面上畫出單位圓、零點與極點。 離散系統中z變化建立了時域函數h(n)與z域函數H(z)之間的對應關系。因此,z變化的函數H(z)從形式可以反映h(n)的部分內在性質。可根據系統的傳遞函數H(z)求單位沖激響應h(n)的函數impz、filter等。 利用系統的頻率響應,可以分析系統對各種頻率成分的響應特性,并推出系統的特性(高通、低通、帶通、帶阻等)。 MATLAB提供了求離散時間系統頻響特性的函數freqz,調用freqz的格式主要有兩種。一種形式為 [H,w]= reqz(B,A,N)其中,B與A分別表示H(z)分子和分母多項式的系數向量;N為正整數,默認值為512;返回值w包含[0,π]范圍內的N個頻率等分點;返回值H則是離散時間系統頻率響應在0~π范圍內N個頻率處的值。另一種形式為 [H,w]= freqz(B,A,N,‘whole’) 與第一種方式不同之處在于角頻率的范圍由[0,π]擴展到[0,2π]。 三、實驗內容與結果分析 已知LTI離散時間系統,要求由鍵盤實現系統參數輸入,并繪出幅頻和相頻響應曲線和零極點分布圖,進而分析系統的濾波特性和穩定性。 (一)程序 b=[0.0528,0.797,0.1295,0.1295,0.797,0.0528]; a=[1,-1.8107,2.4947,-1.8801,0.9537,-0.2336];w=[0:20:500]*pi/500; x1=0.0528+0.797*exp(-1*j*w)+0.1295*exp(-2*j*w)+0.1295*exp(-3*j*w)+0.797*exp(-4*j*w)+0.0528*exp(-5*j*w); x2=1-1.8107*exp(-1*j*w)+2.4947*exp(-2*j*w)+1.8801*exp(-3*j*w)+0.9537*exp(-4*j*w)+0.2336*exp(-5*j*w);x22=x2+(x2==0)*eps;x=x1./x22;magx=abs(x); angx=angle(x).*180/pi; subplot(2,2,3);zplane(b,a);title('零極點圖');subplot(2,2,2);stem(w/pi,magx);title('幅度部分');ylabel('振幅');subplot(2,2,4);stem(w/pi,angx); xlabel('以pi為單位的頻率');title('相位部分');ylabel('相位'); (二)波形圖 圖4-1 幅頻、相頻響應曲線、零極點分布圖 實驗六 IIR數字濾波器的設計 一、實驗目的 從理論上講,任何的線性是不變(LTI)離散時間系統都可以看做一個數字濾波器,因此設計數字濾波器實際就是設計離散時間系統。數字濾波器你包括IIR(無限沖激響應)和FIR(有限沖激響應)型,在設計時通常采用不同的方法。 本實驗通過使用MATLAB函數對數字濾波器進行設計和和實現,要求掌握IIR數字巴特沃斯濾波器、數字切比雪夫濾波器的設計原理、設計方法和設計步驟;能根據給定的濾波器指標進行濾波器設計;同時也加深學生對數字濾波器的常用指標和設計過程的理解。 二、實驗原理 在IIR濾波器的設計中,常用的方法是:先根據設計要求尋找一個合適的模擬原型濾波器,然后根據一定的準則將此模擬原型濾波器轉換為數字濾波器。 IIR濾波器的階數就等于所選的模擬原型濾波器的階數,所以其階數確定主要是在模擬原型濾波器中進行的。 IIR數字濾波器的設計方法如下:(1)沖激響應不變法。(2)雙線性變化法。 一般來說,在要求時域沖激響應能模仿模擬濾波器的場合,一般使用沖激響應不變法。沖激響應不變法一個重要特點是頻率坐標的變化是線性的,因此如果模擬濾波器的頻率響應帶限于折疊頻率的話,則通過變換后濾波器的頻率響應可不失真地反映原響應與頻率的關系。 與沖激響應不變法比較,雙線性變化的主要優點是靠頻率的非線性關系得到s平面與z平面的單值一一對應關系,整個值對應于單位圓一周。所以從模擬傳遞函數可直接通過代數置換得到數字濾波器的傳遞函數。 MATLAB提供了一組標準的數字濾波器設計函數,大大簡化了濾波器的設計工程。 (1)butter。 (2)cheby1、cheby2。 三、實驗內容及分析 利用MATLAB編程方法或利用MATLAB中fdatool工具設計不同功能的IIR數字濾波器。 1、基于chebyshev I型模擬濾波器原型使用沖激不變轉換方法設計數字濾波器,要求參數為通帶截止頻率?p?0.4?;通帶最大衰減Ap?1dB;阻帶截止頻率?s?0.4?;阻帶最小衰減As?35dB。 程序: wp=0.2*pi; %通帶邊界頻率 ws=0.4*pi; %阻帶截止頻率 rp=1; %通帶最大衰減 rs=35; %阻帶最小衰減 Fs=1000; %?ùéè3é?ù??3?1000hz [N,Wn]=cheb1ord(wp,ws,rp,rs,'s'); [Z,P,K]=cheby1(N,rp,Wn,'s');[H,W]=zp2tf(Z,P,K); figure(1);freqs(H,W);[P,Q]=freqs(H,W);figure(2);plot(Q*Fs/(2*pi),abs(P));grid on; xlabel('頻率/Hz');ylabel('幅度'); 2、基于Butterworth型模擬濾波器原型使用雙線性變換方法設計數字濾波器的,要求參數為截止頻率?p?0.4?;通帶最大衰減Ap?1dB;阻帶截止頻率?s?0.25?;阻帶最小衰減AS?40dB。程序: wp=0.4*pi;ws=0.25*pi;rp=1;rs=40;fs=500;ts=1/fs;wp1=wp*ts;ws1=ws*ts; wp2=2*fs*tan(wp1/2);ws2=2*fs*tan(ws1/2); [N,Wn]=buttord(wp2,ws2,rp,rs,'s');[Z,P,K]=buttap(N);[Bap,Aap]=zp2tf(Z,P,K);[b,a]=lp2lp(Bap,Aap,Wn);[bz,az]=bilinear(b,a,fs);[H,W]=freqz(bz,az);subplot(2,1,1);plot(W/pi,abs(H));grid on;xlabel('頻率')ylabel('幅度')subplot(2,1,2); plot(W/pi,20*log10(abs(H)));grid on;xlabel('頻率');ylabel('幅度(dB)'); 實驗七 FIR數字濾波器的設計 一、實驗目的 掌握用窗函數設計FIR數字濾波的原理及其設計步驟;熟悉線性相位數字濾波器的特性。學習編寫數字濾波器的設計程序的方法,并能進行正確編程;根據給定的濾波器指標,給出設計步驟。 二、實驗原理 如果系統的沖激響應h(n)為已知,則系統的輸入輸出關系為 y(n)=x(n)*h(n) 對于低通濾波器,只要設計出低通濾波器的沖激響應函數,就可以由式得到系統的輸出了。 但是將h(n)作為濾波器的脈沖響應有兩個問題:一是它是無限長的;二是它是非因果的。對此,采取兩項措施:一是將h(n)截短;二是將其右移。 設計時,要根據阻帶的最小衰減和過渡帶寬度來選擇恰當的窗函數類型和窗口長度N。常用的窗函數有矩形窗、海明窗和布萊克曼窗等。 窗函數設計FIR濾波器步驟如下: (1)給定理想頻率響應的幅頻特性和相頻特性; (2)求理想單位脈沖響應,在實際計算中,可對理想頻率響應采樣。(3)根據過渡帶寬度和阻帶最小衰減,確定窗函數類型和窗口長度N;(4)求FIR濾波器單位脈沖響應; (5)分析幅頻特性,若不滿足要求,可適當改變窗函數形式或長度N,重復上述設計過程,以得到滿意的結果。 三、實驗內容及分析 1、分別用海明窗和布萊克曼窗設計一個48階的FIR帶通濾波器,通帶為Wn??0.450.55?。程序1:海明窗設計 N=48; Window=hamming(N+1);w1=0.45;w2=0.55;ws=[w1,w2]; b=fir1(N,ws/pi,Window);freqz(b,1,512);title('海明窗');grid on; 程序2:萊克曼窗設計 N=48; Window=blackman(N+1);w1=0.45;w2=0.55;ws=[w1,w2]; b=fir1(N,ws/pi,Window);freqz(b,1,512);title('布萊克曼窗');grid on; 2、用矩形窗設計一個線性相位高通濾波器。其中He??jw?e?j????????00.3????? 0???0.3?程序: N=9; alpha=(N-1)/2;Wc=0.7*pi;n=(0:8);i=n-alpha;i=i+(i==0)*eps; h=(-1).^n.*sin((i).*Wc)./((i).*pi);%矩形窗函數設計的系統脈沖響應 w=(0:1:500)*2*pi/500; H=h*exp(-j*n'*w);%矩形窗函數設計的頻響 magH=abs(H);% 矩形窗函數設計的振幅 subplot(211);stem(n,h); axis([0,8,-0.4,0.4]);title('矩形窗設計h(n)');line([0,10],[0,0]);xlabel('n');ylabel('h');subplot(212);plot(w/pi,magH); xlabel('以pi為單位的頻率');ylabel('H振幅');axis([0,2,0,1.7]);title('矩形窗設計振幅譜'); 實驗心得體會: 這次實驗使我進一步加深了對MATLAB軟件的使用。從上次的信號系統實驗的初步使用到這一次的深入了解,有了更深刻的認識。對這種語言環境也有了新的了解。 在實驗的過程中,我對數字濾波器的整個過程有了很好的理解和掌握。IIR數字濾波器的設計讓我知道了巴特沃思濾波器和切比雪夫濾波器的頻率特性,還有雙線性變換及脈沖響應不變法設計的濾波器的頻率特性。做這兩個實驗的時候程序有點困難,但經過細心的改寫圖形最終出來了。FIR數字濾波器的設計出來的是兩種窗的圖形,通過兩種窗的比較,我了解了他們各自的特點,幅頻和相頻特性。 最后,感謝張老師對我的諄諄教導! 南京郵電大學 實 驗 報 告 實驗名稱_____熟悉MATLAB環境 ___ 快速傅里葉變換及其應用 ____IIR數字濾波器的設計_ FIR數字濾波器的設計 課程名稱 數字信號處理A 班級學號_______09002111___________ 姓 名 王都超 開課時間 2011/2012學年,第 二 學期 實驗一 熟悉MATLAB環境 一、實驗目的 (1)熟悉MATLAB的主要操作命令。(2)學會簡單的矩陣輸入和數據讀寫。(3)掌握簡單的繪圖命令。 (4)用MATLAB編程并學會創建函數。(5)觀察離散系統的頻率響應。 二、實驗內容 (1)數組的加、減、乘、除和乘方運算。輸入A=[1 2 3 4],B=[3,4,5,6],求 C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B。并用stem語句畫出A、B、C、D、E、F、G。 D = -2 E = F = 0.3333 0.5000 0.6000 0.6667 G = 243 4096(2)用MATLAB實現下列序列: a)x(n)?0.8n 0?n?1 5n=0:1:15;x1=0.8.^n;a=(0.2+3*i)*n;stem(x1)b)x(n)?e(0.2?3j)n 0?n?15 n=0:1:15;x2=exp(a);a=(0.2+3*i)*n;stem(x2) c)x(n)?3cos(0.125?n?0.2?)?2sin(0.25?n?0.1?) 0?n?15 (4)繪出下列時間函數的圖形,對x軸、y軸以及圖形上方均須加上適當的標注: a)x(t)?sin(2?t)0?t?10s b)x(t)?cos(100?t)sin(?t)0?t?4s t=0:0.01:4;x=cos(100*pi*t).*sin(pi*t);plot(t,x, 'r-');xlabel('t'),ylabel('x(t)'),title('cos') (6)給定一因果系統H(z)?(1?頻響應和相頻響應。 2z?1?z?2)/(1?0.67z?1?0.9z?2),求出并繪制H(z)的幅 (7)計算序列{8-2-1 2 3}和序列{2 3-1-3}的離散卷積,并作圖表示卷積結果。 (8)求以下差分方程所描述系統的單位脈沖響應h(n), 0?n?50 y(n)?0.1y(n?1)?0.06y(n?2)?x(n)?2x(n?1) 實驗過程與結果(含實驗程序、運行的數據結果和圖形); clear all;N=50;a=[1-2];b=[1 0.1-0.06];x1=[1 zeros(1,N-1)];n=0:1:N-1;h=filter(a,b,x1);stem(n,h)axis([-1 53-2.5 1.2]) 實驗二 快速傅里葉變換及其應用 一、實驗目的 (1)在理論學習的基礎上,通過本實驗,加深對FFT的理解,熟悉MATLAB中的有關函數。(2)應用FFT對典型信號進行頻譜分析。 (3)了解應用FFT進行信號頻譜分析過程中可能出現的問題,以便在實際中正確應用FFT。(4)應用FFT實現序列的線性卷積和相關。 二、實驗內容 實驗中用到的信號序列 a)高斯序列 ??(n?p)q?xa(n)??e?0?20?n?15 其他 b)衰減正弦序列 ?e?ansin(2?fn)xb(n)??0?0?n?15其他 c)三角波序列 ?n?xc(n)??8?n?0?0?n?34?n?7 其他 d)反三角波序列 ?4?n?xd(n)??n?4?0?0?n?34?n?7 其他 (1)觀察高斯序列的時域和幅頻特性,固定信號xa(n)中參數p=8,改變q的值,使q分別等于2,4,8,觀察它們的時域和幅頻特性,了解當q取不同值時,對信號序列的時域幅頻特性的影響;固定q=8,改變p,使p分別等于8,13,14,觀察參數p變化對信號序列的時域及幅頻特性的影響,觀察p等于多少時,會發生明顯的泄漏現象,混疊是否也隨之出現?記錄實驗中觀察到的現象,繪出相應的時域序列和幅頻特性曲線。 (3)觀察三角波和反三角波序列的時域和幅頻特性,用N=8點FFT分析信號序列xc(n)和觀察兩者的序列形狀和頻譜曲線有什么異同?繪出兩序列及其幅頻特性xd(n)的幅頻特性,曲線。 在xc(n)和xd(n)末尾補零,用N=32點FFT分析這兩個信號的幅頻特性,觀察幅頻特性發生了什么變化?兩種情況的FFT頻譜還有相同之處嗎?這些變化說明了什么? (5)用FFT分別實現xa(n)(p=8,q=2)和xb(n)(a=0.1,f=0.0625)的16點循環卷積和線性卷積。 n=0:15;p=8;q=2; xa=exp(-(n-p).^2/q);subplot(2,3,1);stem(n,xa,'.');title('xa波形'); Xa=fft(xa,16);subplot(2,3,4);stem(abs(Xa),'.'); title('Xa(k)=FFT[xa(n)]的波形 ');A=1;f=0.0625;a=0.1; xb=exp(-a*n).*sin(2*pi*f*n);subplot(2,3,2);stem(n,xb,'.');title('xb波形');Xb=fft(xb,16);subplot(2,3,5);stem(abs(Xb),'.'); title('Xb(k)=FFT[xb(n)]的波形 '); 實驗過程與結果(含實驗程序、運行的數據結果和圖形); 實驗三 IIR數字濾波器的設計 一、實驗目的 (1)掌握雙線性變換法及脈沖響應不變法設計IIR數字濾波器的具體設計方法及其原理,熟悉用雙線性變換法及脈沖響應不變法設計低通、高通和帶通IIR數字濾波器的計算機編程。 (2)觀察雙線性變換及脈沖響應不變法設計的濾波器的頻域特性,了解雙線性變換法及脈沖響應不變法的特點。 (3)熟悉巴特沃思濾波器、切比雪夫濾波器和橢圓濾波器的頻率特性。 二、實驗內容(1)P162 例4.4 設采樣周期T=250?s(采樣頻率fs=4kHz),分別用脈沖響應不變法和雙線性變換法設計一個三階巴特沃思低通濾波器,其3dB邊界頻率為fc=1kHz。 脈沖響應不變法: fc=1000;fs=4000;OmegaC=2*pi*fc;[B,A]=butter(3, OmegaC,'s');[num1,den1]=impinvar(B,A,fs);[h1,w]=freqz(num1,den1);f = w/pi*fs/2;plot(f,abs(h1)); 雙線性變換法: fc=1000;fs=4000; OmegaC=2*fs*tan(pi*fc/fs);[B,A]=butter(3, OmegaC,'s');[num2,den2]=bilinear(B,A,fs);[h2,w]=freqz(num2,den2);f = w/pi*fs/2;plot(f,abs(h2)); 同一圖中畫兩條曲線: fc=1000;fs=4000;OmegaC=2*pi*fc;[B,A]=butter(3, OmegaC,'s');[num1,den1]=impinvar(B,A,fs);[h1,w]=freqz(num1,den1);f = w/pi*fs/2; OmegaC=2*fs*tan(pi*fc/fs);[B,A]=butter(3, OmegaC,'s');[num2,den2]=bilinear(B,A,fs);[h2,w]=freqz(num2,den2);f = w/pi*fs/2;plot(f,abs(h1),'r-.');hold on;plot(f,abs(h2),'g-'); (選做)(2)fc=0.2kHz,?=1dB,fr=0.3kHz,At=25dB,T=1ms;分別用脈沖響應不變法及雙線性變換法設計一巴特沃思數字低通濾波器,觀察所設計數字濾波器的幅頻特性曲線,記錄帶寬和衰減量,檢查是否滿足要求。比較這兩種方法的優缺點。 實驗過程與結果(含實驗程序、運行的數據結果和圖形); 實驗四 FIR數字濾波器的設計 一、實驗目的 (1)掌握用窗函數法,頻率采樣法及優化設計法設計FIR濾波器的原理及方法,熟悉相應的計算機編程; (2)熟悉線性相位FIR濾波器的幅頻特性和相頻特性; (3)了解各種不同窗函數對濾波器性能的影響。 二、實驗內容 (1)生成一個長度為20的矩形窗,畫出其時域和幅頻特性曲線。n=0:1:19;N=20;win(1:20)=1;[H,w]=freqz(win,1);subplot(2,1,1);stem(n,win)subplot(2,1,2);plot(w,abs(H)); (2)用矩形窗設計一個21階的線性相位低通FIR數字濾波器,截止頻率Wc=0.25π,求出濾波器系數,并繪出濾波器的幅頻特性。修改程序,分別得到階次為N=41,61的濾波器,并顯示其各自的幅頻曲線。 a)在上面所得的幾幅圖中,在截止頻率兩邊可以觀察到幅頻響應的擺動行為。請問波紋的數量與濾波器脈沖響應的長度之間有什么關系? b)最大波紋的高度與濾波器脈沖響應的長度之間有什么關系? 實驗過程與結果(含實驗程序、運行的數據結果和圖形); 21階的線性相位低通FIR數字濾波器: Wc=0.25*pi;N=21;M=(N-1)/2; %位移量 for n=0:(N-1) if(n== fix(M)) %中間的點單獨算 hd(n+1)=Wc/pi; else hd(n+1)=sin(Wc*(n-M))/(pi*(n-M));end;end;win=boxcar(N);%%%不同窗函數 h=hd.*win';[H,w]=freqz(h,1);n=0:1:N-1;subplot(3,1,1);stem(n,h)subplot(3,1,2);plot(w,abs(H));subplot(3,1,3);plot(w,angle(H)); 41階的線性相位低通FIR數字濾波器: Wc=0.25*pi;N=41;M=(N-1)/2; %位移量 for n=0:(N-1) if(n== fix(M)) %中間的點單獨算 hd(n+1)=Wc/pi; else hd(n+1)=sin(Wc*(n-M))/(pi*(n-M));end;end;win=boxcar(N);%%%不同窗函數 h=hd.*win';[H,w]=freqz(h,1);n=0:1:N-1;subplot(3,1,1);stem(n,h)subplot(3,1,2);plot(w,abs(H));subplot(3,1,3);plot(w,angle(H)); 61階的線性相位低通FIR數字濾波器: Wc=0.25*pi;N=61;M=(N-1)/2; %位移量 for n=0:(N-1) if(n== fix(M)) %中間的點單獨算 hd(n+1)=Wc/pi; else hd(n+1)=sin(Wc*(n-M))/(pi*(n-M));end;end;win=boxcar(N);%%%不同窗函數 h=hd.*win';[H,w]=freqz(h,1);n=0:1:N-1;subplot(3,1,1);stem(n,h)subplot(3,1,2);plot(w,abs(H));subplot(3,1,3);plot(w,angle(H)); 數字信號處理實驗小結及心得體會: 通過這次實驗,我對MATLAB語言有了一定的認識,雖然還不能完全用MATLAB獨立編寫程序,但對這種語言環境有了新的了解。我知道了一般的加減乘除在MATLAB中不同的意義。知道輸入、輸出語句怎么形成。通過快速傅里葉變換及其應用的實驗,加深了我對FFT的理解,還有對各典型信號的頻譜分析,改變參數后時域和幅頻特性的變化。IIR數字濾波器的設計讓我知道了巴特沃思濾波器和切比雪夫濾波器的頻率特性,還有雙線性變換及脈沖響應不變法設計的濾波器的頻率特性。做這個實驗的時候程序有點困難,很多細節問題不能考慮清楚,導致圖形出不來。FIR數字濾波器的設計出來的是三種窗的圖形,通過三種窗的比較,我了解了他們各自的特點,幅頻和相頻特性。我在這次實驗中的收獲很大,接觸了很多新的知識,但在實驗寫程序時,我發現自己還有很多不足。很多程序寫不完全。這是自己今后要加強的地方。 實 驗 報 告 書 系部學生專業班 實驗 名稱姓名名稱 級時間: : : : : 實驗一 直方圖均衡 一、實驗目的 在學習圖像直方圖的概念、計算方法、性質和相關應用基礎上,生成、繪制圖像的直方圖,并應用MATLAB編程實現圖像直方圖均衡化程序。 二、實驗內容 (1)計算并繪制圖像直方圖; (2)編程實現圖像的直方圖均衡化處理,顯示均衡前后的直方圖和圖像; 三、實驗運行結果 四、實驗中遇到的問題及解決方法 1、顯示無法找到圖像文件,應將圖片與xx.m文件置于同一文件夾; 2、編程過程中應注意標點的輸入法,應該用英文輸入,否則會報錯。 3、編程完成后運行時輸入文件名與保存時文件名相同,區分大小寫。 五、思考題 (1)、灰度直方圖可以反映一幅圖像的哪些特征? 答: 1、表征了圖像的一維信息。只反映圖像中像素不同灰度值出現的次數(或頻數)而未反映像素所在位置。 2、與圖像之間的關系是多對一的映射關系。一幅圖像唯一確定出與之對應的直方圖,但不同圖像可能有相同的直方圖。 3、子圖直方圖之和為整圖的直方圖。(2)均衡化后的直方圖有何特點? 答:經直方圖均衡化處理后,可以得到一副改善了質量的新圖像。這幅圖像的灰度層次將不再是呈黑暗色調的圖像,而是一副灰度層次較為適中的、比原始圖像清晰、明快得多的圖像。處理的結果使圖像更適合與人的視覺特征或機器的識別系統。 六、實驗心得體會 本次實驗中,因為初學這個軟件,我學習到了在程序中關于圖像的運用,以及也復習了課本上的許多知識,加深了對直方圖均衡化的理解。 七、程序清單 clear all;I=imread('lena_gray_256.tif');%打開一幅灰度圖像 [m,n]=size(I);p=m*n;J=imhist(I)./p; %計算圖像的歸一化直方圖 subplot(1,3,1),imshow(I); subplot(1,3,2),imhist(I,64); subplot(1,3,3),plot(J); (2)直方圖均衡化 clear all;Im=imread('region.jpg');J=histeq(Im);%均衡化 subplot(2,2,1);imshow(Im);title('原圖');%顯示原圖 subplot(2,2,2);imhist(Im);title('原圖直方圖');%顯示原圖的直方圖 subplot(2,2,3);imshow(J);title('均衡化結果');%顯示均衡化后的圖像 subplot(2,2,4);imhist(J);title('均衡化結果的直方圖');%顯示均衡化后的直方圖 實驗二 頻域圖像增強 一、實驗目的 1、頻域圖像增強 2、掌握基于頻域的圖像增強方法。 二、實驗內容 (1)編程實現圖像的理想低通和高通濾波;(2)編程實現圖像的巴特沃斯低通和高通濾波。 三、實驗運行結果 四、實驗中遇到的問題及解決方法 顯示圖像無法打開,最終查出來時圖像格式弄錯了。 五、思考題 分析為什么圖像通過低通濾波器后變得模糊?為什么通過高通濾波器后得到銳化結果? 答:圖像的精細結構及突變部分主要由高頻成分起作用,故經低通濾波后圖像的精細結構消失,變得模糊;經高通濾波后圖像得到銳化。 六、實驗心得體會 本實驗中遇到很多問題及錯誤,例如圖像打不開、處理后圖像模糊等,都是經常容易發生的錯誤,最后實驗幾次,就能夠逐一自己解決了。使自己對數字圖像處理課程中的許多問題有了更實際和確切的深入了解。 七、程序清單 clc;clear;data4=imread('lena.gif');subplot(3,2,1);imshow(data4);title('原圖');i=fft2(data4);subplot(3,2,2);i=fftshift(i);z=log(abs(i));x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);mesh(z);%以三維坐標顯示該圖像頻譜圖title('原圖頻譜');[n,m]=size(i);%for k=1:1:n for l=1:1:m if(k^2+l^2)>=190^2 % result(k,l)=0;else result(k,l)=i(k,l);end end end subplot(3,2,4); 對該圖進行低通濾波 選取D=190 z=log(abs(result));%三維方式顯示低通濾波后的頻譜圖 x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);mesh(z);title('理想低通濾波后的頻譜');subplot(3,2,3);%新建圖像顯示窗口 result=fftshift(result);%濾波后的數據去中心化 b=ifft2(result);%逆傅里葉變換 imshow(uint8(abs(b)));title('理想低通濾波后的圖像');subplot(3,2,6);%新建圖像顯示窗口 % [n,m]=size(c);%對原圖進行高通濾波 for k=1:1:n for l=1:1:m if(k^2+l^2)<=190^2 %選取D=190 result(k,l)=0;else result(k,l)=i(k,l);end end end z=log(abs(result));x=0:1:255;%三維方式顯示高通濾波前的頻譜圖 y=0:1:255;[x,y]=meshgrid(x,y);mesh(z);title('理想高通濾波后的頻譜');subplot(3,2,5);result=fftshift(result);%濾波后的數據去中心化 d=ifft2(result);%逆傅里葉變換 imshow(uint8(abs(d)));title('理想高通濾波后的圖像');%頻域增強(巴特沃斯原型) %二階巴特沃斯(Butterworth)低通濾波器 %clc;%clear;Figure;J1=imread('lena.gif');subplot(3,2,1);imshow(J1);title('原圖');f=double(J1);g=fft2(f);% 傅立葉變換 g=fftshift(g);% 轉換數據矩陣 subplot(3,2,2);x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);z=log(abs(g));%取幅度 mesh(z);%以三維坐標顯示該圖像頻譜圖 title('原圖頻譜');[M,N]=size(g);nn=2;% 二階巴特沃斯(Butterworth)低通濾波器 d0=20;m=fix(M/2);n=fix(N/2);for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2);h=1/(1+0.414*(d/d0)^(2*nn));% 計算低通濾波器傳遞函數 result(i,j)=h*g(i,j); end end subplot(3,2,4);x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);z=log(abs(result));%取幅度 mesh(z);%以三維坐標顯示該圖像頻譜圖 title('低通濾波后的頻譜');result=ifftshift(result);J2=ifft2(result);J3=uint8(abs(J2));subplot(3,2,3);imshow(J3);title('低通濾波后的圖像'); %利用二階巴特沃斯(Butterworth)高通濾波器 nn=2;% 二階巴特沃斯(Butterworth)高通濾波器 d0=5;m=fix(M/2);n=fix(N/2);for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2);if(d==0)h=0;else h=1/(1+0.414*(d0/d)^(2*nn));% 計算傳遞函數 end result(i,j)=h*g(i,j); end end subplot(3,2,6);x=0:1:255;y=0:1:255;[x,y]=meshgrid(x,y);z=log(abs(result));%取幅度 mesh(z);%以三維坐標顯示該圖像頻譜圖 title('高通濾波后的頻譜');result=ifftshift(result);J2=ifft2(result);J3=uint8(abs(J2));subplot(3,2,5);imshow(J3);title('高通濾波后的圖像'); 實驗三 圖像邊緣檢測與連接 一、實驗目的 圖像邊緣檢測與連接 二、實驗內容 (1)編程實現一階差分邊緣檢測算法,包括Robert梯度算子、Prewitt算子、Sobel算子等;(2)編程實現二階差分拉普拉斯邊緣檢測算法以及LoG檢測法和Canny檢測法;(3)分析與比較各種邊緣檢測算法的性能; (4)編程實現Hough變換提取直線 (5)分析Hough變換檢測性能; 三、實驗運行結果 四、實驗中遇到的問題及解決方法 拷貝文件后沒改文件名,直接執行時出現錯誤,最后重新修改后重新編譯,使之成功。 五、思考題 (1)邊緣的方向是什么意思?為什么要考慮邊緣的方向? 答:邊緣常常意味著一個區域的終結和另一個區域的開始,圖像的邊緣也包含了物體的形狀的重要信息,他不僅在分析圖像時大幅度的減少了要處理的信息量,而且還保護了目標的邊界結構。所以考慮邊緣的方向很重要。 (2)Hough變換原理是什么? 答:Hough變換的基本原理在于利用點與線的對偶性,將原始圖像空間的給定的曲線通過曲線表達形式變為參數空間的一個點。這樣就把原始圖像中給定曲線的檢測問題轉化為準找參數空間的峰值問題。也即把檢測整體特性轉化為檢測局部特性。比如直線、橢圓、圓、弧線等。 六、實驗心得體會 對于一些圖像處理的函數不是很了解,只能夠按課本的參照函數拷貝做實驗,對于其中的一些函數問題理解不是很透徹,有些甚至完全不懂。還得繼續努力。 七、程序清單 1、邊緣檢測 由edge函數實現各算子對圖像的邊緣檢測 clear all;I = imread('d:office.bmp');I=rgb2gray(I);BW1 = edge(I,'sobel'); %利用Sobel算子進行邊緣檢測 BW2 = edge(I,'roberts');%利用roberts算子進行邊緣檢測 BW3 = edge(I,'prewitt');%利用prewitt算子進行邊緣檢測 BW4 = edge(I,'log'); %利用log算子進行邊緣檢測 BW5 = edge(I,'canny'); %利用canny算子進行邊緣檢測 subplot(2,3,1),imshow(I)subplot(2,3,2),imshow(BW1)subplot(2,3,3),imshow(BW2)subplot(2,3,4),imshow(BW3) subplot(2,3,5),imshow(BW4)subplot(2,3,6),imshow(BW5) 2、邊緣連接 使用Hough變換作線檢測和連接 clear all; RGB = imread('d:M_M.bmp');I=RGB;%I = rgb2gray(RGB);BW = edge(I,'canny'); % 利用Canny算子提取圖像邊緣 [H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);figure(1), imshow(T,R,H,[],'notruesize'), axis on, axis normal xlabel('T'), ylabel('R')p = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:)))); %找到5個較明顯的Hough變換峰值 hold on plot(T(p(:,2)),R(p(:,1)),'s','color','white');lines = houghlines(BW,T,R,p,'FillGap',10,'MinLength',10); %查找并鏈接線段 figure, imshow(BW), hold on %在二值圖中疊加顯示這些線段 for k = 1:length(lines) xy = [lines(k).point1;lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');end 數字圖像處理 實驗報告 目錄 1.數字圖像處理簡介 2.實驗目的3.實驗內容 4.實驗結果及代碼展示 5.算法綜述 6.Matlab優勢 7.總結 8.存在問題 一、數字圖像處理簡介 圖像處理,是對圖像進行分析、加工、和處理,使其滿足視覺、心理以及其他要求的技術。圖像處理是信號處理在圖像域上的一個應用。目前大多數的圖像是以數字形式存儲,因而圖像處理很多情況下指數字圖像處理。此外,基于光學理論的處理方法依然占有重要的地位。 圖像處理是信號處理的子類,另外與計算機科學、人工智能等領域也有密切的關系。 傳統的一維信號處理的方法和概念很多仍然可以直接應用在圖像處理上,比如降噪、量化等。然而,圖像屬于二維信號,和一維信號相比,它有自己特殊的一面,處理的方式和角度也有所不同。 二、實驗目的 鞏固所學知識,提高所學能力 三、實驗內容 利用matlab的GUI程序設計一個簡單的圖像處理程序,并含有如下基本功能: 1.讀入一幅RGB圖像,變換為灰度圖像和二值圖像,并在同一個窗口內分成三個子窗口來分別顯示RGB圖像和灰度圖像,注上文字標題 2.對給定圖像進行旋轉 3.對給定的圖像添加噪聲(椒鹽噪聲、高斯噪聲) 四、實驗結果及代碼展示 1.軟件設計界面 2.各模塊功能展示以及程序代碼 (1)讀入一幅RGB圖像,變換為灰度圖像和二值圖像,并在同一個窗口內分成三個子窗口來分別顯示RGB圖像和灰度圖像,注上文字標題 效果展示: 代碼: a = imread('C:Documents and SettingsAdministrator桌面數字圖像舞美.JPG'); i = rgb2gray(a);I = im2bw(a,0.5); subplot(3,1,1);imshow(a);title('源圖像')subplot(3,1,2);imshow(i);title('灰度圖像')subplot(3,1,3);imshow(I);title('二值圖像') (2)圖像旋轉 原圖 效果展示: 代碼: clc;clear all;close all; Img=imread('D:My DocumentsMy Pictures5.JPG');Img=double(Img);[h w]=size(Img);alpha=pi/4; wnew=w*cos(alpha)+h*sin(alpha);hnew=w*sin(alpha)+h*cos(alpha);wnew=ceil(wnew); hnew=ceil(hnew);u0=w*sin(alpha); T=[cos(alpha),sin(alpha);-sin(alpha),cos(alpha)];Imgnew2=zeros(hnew,wnew);Imgnew1=zeros(hnew,wnew);for u=1:hnew for v=1:wnew tem=T*([u;v]-[u0;0]);x=tem(1);y=tem(2);if x>=1&&x<=h&&y>=1&&y<=w x_low=floor(x);x_up=ceil(x);y_low=floor(y);y_up=ceil(y);if(x-x_low)<=(x_up-x)x=x_low; else x=x_up; end if(y-y_low)<=(y_up-y)y=y_low; else y=y_up; end p1=Img(x_low,y_low);p2=Img(x_up,y_low);p3=Img(x_low,y_low);p4=Img(x_up,y_up);s=x-x_low;t=y-y_low;Imgnew1(u,v)=Img(x,y); Imgnew2(u,v)=(1-s)*(1-t)*p1+(1-s)*t*p3+(1-t)*s*p2+s*t*p4;end end end figure;imshow(Imgnew2,[]);B=imrotate(Img,alpha/pi*180);figure;imshow(B,[]); (3)對給定的圖像添加噪聲(斑點噪聲、高斯噪聲)效果展示: 代碼: I= imread('D:My DocumentsMy Pictures5.JPG');figure,subplot(211);imshow(I);title('原圖');J1=imnoise(I,'gaussian',0,0.02); subplot(223);imshow(J);title('添加高斯噪聲');J=imnoise(I,'speckle',0.04); subplot(224);imshow(J);title('添加斑點噪聲'); 五、算法綜述 灰度圖像: 一幅完整的圖像,是由紅色、綠色、藍色三個通道組成的。紅色、綠色、藍色三個通道的縮覽圖都是以灰度顯示的。用不同的灰度色階來表示“ 紅,綠,藍”在圖像中的比重。通道中的純白,代表了該色光在此處為最高亮度,亮度級別是255。 通道是整個Photoshop顯示圖像的基礎。色彩的變動,實際上就是間接在對通道灰度圖進行調整。通道是Photoshop處理圖像的核心部分,所有的色彩調整工具都是圍繞在這個核心周圍使用的。 在計算機領域中,灰度數字圖像是每個像素只有一個采樣顏色的圖像。這類圖像通常顯示為從最暗黑色到最亮的白色的灰度,盡管理論上這個采樣可以任何顏色的不同深淺,甚至可以是不同亮度上的不同顏色。灰度圖像與黑白圖像不同,在計算機圖像領域中黑白圖像只有黑色與白色兩種顏色;灰度圖像在黑色與白色之間還有許多級的顏色深度。但是,在數字圖像領域之外,“黑白圖像”也表示“灰度圖像”,例如灰度的照片通常叫做“黑白照片”。在一些關于數字圖像的文章中單色圖像等同于灰度圖像,在另外一些文章中又等同于黑白圖像。灰度圖像經常是在單個電磁波頻譜如可見光內測量每個像素的亮度得到的。 用于顯示的灰度圖像通常用每個采樣像素 8 位的非線性尺度來保存,這樣可以有 256 級灰度。這種精度剛剛能夠避免可見的條帶失真,并且非常易于編程。在醫學圖像與遙感圖像這些技術應用中經常采用更多的級數以充分利用每個采樣 10 或 12 位的傳感器精度,并且避免計算時的近似誤差。在這樣的應用領域每個采樣 16 位即 65536 級得到流行。 二值圖像: 是指每個像素不是黑就是白,其灰度值沒有中間過渡的圖像。二值圖像一般用來描述文字或者圖形,其優點是占用空間少,缺點是,當表示人物,風景的圖像時,二值圖像只能描述其輪廓,不能描述細節。這時候要用更高的灰度級。 二值圖像是每個像素只有兩個可能值的數字圖像。人們經常用黑白、B&W、單色圖像表示二值圖像,但是也可以用來表示每個像素只有一個采樣值的任何圖像,例如灰度圖像等。 二值圖像中所有的像素只能從0和1這兩個值中取,因此在MATLAB中,二值圖像用一個由0和1組成的二維矩陣表示。這兩個可取的值分別對應于關閉和打開,關閉表征該像素處于背景,而打開表征該像素處于前景。以這種方式來操作圖像可以更容易識別出圖像的結構特征。二值圖像操作只返回與二值圖像的形式或結構有關的信息,如果希望對其他類型的圖像進行同樣的操作,則首先要將其轉換為二進制的圖像格式,可以通過調用MATLAB提供的im2bw()來實現。 二值圖像經常出現在數字圖像處理中作為圖像掩碼或者在圖像分割、二值化和dithering的結果中出現。一些輸入輸出設備,如激光打印機、傳真機、單色計算機顯示器等都可以處理二值圖像。 二值圖像經常使用位圖格式存儲。 二值圖像可以解釋為二維整數格Z,圖像變形處理領域很大程度上就是受到這個觀點啟發。 圖像旋轉: 圖像旋轉是指圖像以某一點為中心旋轉一定的角度,形成一幅新的圖像的過程。當然這個點通常就是圖像的中心。既然是按照中心旋轉,自然會有這樣一個屬性:旋轉前和旋轉后的點離中心的位置不變.根據這個屬性,我們可以得到旋轉后的點的坐標與原坐標的對應關系。由于原圖像的坐標是以左上角為原點的,所以我們先把坐標轉換為以圖像中心為原點。假設原圖像的寬為w,高為h,(x0,y0)為原坐標內的一點,轉換坐標后的點為(x1,y1)。那么不難得到: x1 = x0-w/2;y1 =-y0 + h/2;在新的坐標系下,假設(x0,y0)距離原點的距離為r,點與原點之間的連線與x軸的夾角為b,旋轉的角度為a,旋轉后的點為(x1,y1) 噪聲: 是電路或系統中不含信息量的電壓或電流。在工業與自然界中,存在著各種干擾源(噪聲源),如大功率電力電子器件的接入、大功率用電設備的開啟與斷開、雷擊閃電等都會使空間電場和磁場產生有序或無序的變化,這些都是干擾源(或噪聲源)。這些源產生的電磁波或尖峰脈沖通過磁、電耦合或是通過電源線等路徑進入放大電路,各種電氣設備,形成各種形式的干擾。 斑點噪聲: 斑點噪聲是SAR成像系統的一大特色,源自基本分辨單元內地物的隨機散射,在圖像上表現為信號相關(如在空間上相關)的小斑點,它既降低了圖像的畫面質量,又嚴重影響圖像的自動分割、分類、目標檢測以及其它定量專題信息的提取。 SAR圖像斑點噪聲的去除一方面要抑制圖像均勻區域斑點噪聲,另一方面要保持圖像邊緣和紋理細節信息。SAR斑點噪聲的抑制可通過非相干多視處理,也可使用空間域濾波實現。非相干多視處理會降低圖像的地面分辨率。因此,涌現出了一系列空間域濾波方法,如均值濾波、中值濾波、Lee濾波、Kuan濾波、Frost濾波、Sigma濾波以及Gamma Map濾波等。但這類算法存在自身無法克服的矛盾:一方面為增強斑點去噪效果需選較大的濾波窗口,另一方面為保持圖像的實際分辨率要求所選的窗口較小。 高斯噪聲: 所謂高斯噪聲是指它的概率密度函數服從高斯分布(即正態分布)的一類噪聲。如果一個噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱它為高斯白噪聲。高斯白噪聲的二階矩不相關,一階矩為常數,是指先后信號在時間上的相關性。高斯白噪聲包括熱噪聲和散粒噪聲。 實驗中是通過MATLAB自帶的函數產生噪聲,各函數如下: J1=imnoise(I,'salt & pepper',0.05);%添加椒鹽噪聲 J2=imnoise(I,'gaussian',0,0.03); %添加均值為0,方差為0.03的高斯噪聲。 六、Matlab優勢 MATLAB是一個包含大量算法的集合。其可以快捷的實現用戶所需的各種計算功能。函數中所使用的算法都是科研和工程計算中的最新研究成果,而前經過了各種優化和差錯處理。在通常情況下,可以用它來代替底層編程語言,如C和C++。在計算要求相同的情況下,使用MATLAB的編程工作量會大大減少。MATLAB的這些函數集包括從最簡單最基本的函數到諸如矩陣,特征向量、快速傅立葉變換的復雜函數。函數所能解決的問題其大致包括矩陣運算和線性方程組的求解、微分方程及偏微分方程的組的求解、符號運算、傅立葉變換和數據的統計分析、工程中的優化問題、稀疏矩陣運算、復數的各種運算、三角函數和其他初等數學運算、多維數組操作以及建模動態仿真等。圖形處理功能 圖形處理功能MATLAB自產生之日起就具有方便的數據可視化功能,以將向量和矩陣用圖形表現出來,并且可以對圖形進行標注和打印。高層次的作圖包括二維和三維的可視化、圖象處理、動畫和表達式作圖。可用于科學計算和工程繪圖。新版本的MATLAB對整個圖形處理功能作了很大的改進和完善,使它不僅在一般數據可視化軟件都具有的功能(例如二維曲線和三維曲面的繪制和處理等)方面更加完善,而且對于一些其他軟件所沒有的功能(例如圖形的光照處理、色度處理以及四維數據的表現等),MATLAB同樣表現了出色的處理能力。同時對一些特殊的可視化要求,例如圖形對話等,MATLAB也有相應的功能函數,保證了用戶不同層次的要求。另外新版本的MATLAB還著重在圖形用戶界面(GUI)的制作上作了很大的改善,對這方面有特殊要求的用戶也可以得到滿足 模塊集合工具箱 MATLAB對許多專門的領域都開發了功能強大的模塊集和工具箱。一般來說,它們都是由特定領域的專家開發的,用戶可以直接使用工具箱學習、應用和評估不同的方法而不需要自己編寫代碼。目前,MATLAB已經把工具箱延伸到了科學研究和工程應用的諸多領域,諸如數據采集、數據庫接口、概率統計、樣條擬合、優化算法、偏微分方程求解、神經網絡、小波分析、信號處理、圖像處理、系統辨識、控制系統設計、LMI控制、魯棒控制、模型預測、模糊邏輯、金融分析、地圖工具、非線性控制設計、實時快速原型及半物理仿真、嵌入式系統開發、定點仿真、DSP與通訊、電力系統仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。 七、總結 運用matlab軟件對圖像進行處理,讓我鞏固了之前所學的知識,同時也在這次作業中更加了解到matlab語言在生活中的運用環境和掌握這門語言的重要性 八、存在問題 1.在進行圖像增強時要不要講圖像先進行平滑處理? 2.如何增加這個算法的準確度 3.在此次作業中,為何添加椒鹽噪聲時無法顯示第二篇:數字信號處理實驗報告
第三篇:數字信號處理實驗報告
第四篇:數字圖像處理實驗報告
第五篇:數字圖像處理實驗報告