MATLAB實驗報告_第1頁
MATLAB實驗報告_第2頁
MATLAB實驗報告_第3頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于canny算子的邊緣檢測報告題目:基于canny算子的邊緣檢測學(xué) 院:專 業(yè):年 級:學(xué) 號:學(xué)生:指導(dǎo)教師:日 期:目錄摘要 21 Canny 邊緣檢測根本原理 . 32 Canny 邊緣檢測算法數(shù)學(xué)描述 33 算法過程 44 實現(xiàn)過程 45 結(jié)果顯示 96 總結(jié)和體會 97 參考文獻 9摘要圖象的邊緣是指圖象局部區(qū)域亮度變化顯著的局部, 該區(qū)域的灰度剖面一般可以看作是 一個階躍,既從一個灰度值在很小的緩沖區(qū)域內(nèi)急劇變化到另一個灰度相差較大的灰度值。圖象的邊緣局部集中了圖象的大局部信息, 圖象邊緣確實定與提取對于整個圖象場景的 識別與理解是非常重要的, 同時也是圖象分割所依賴的重要特征,

2、 邊緣檢測主要是圖象的灰 度變化的度量、檢測和定位,自從 1959 提出邊緣檢測以來,經(jīng)過五十多年的開展,已有許 多中不同的邊緣檢測方法。本文主要討論通過 canny 算子,來獲取圖像的邊緣區(qū)域的方法。1 Canny邊緣檢測根本原理具有既能濾去噪聲又保持邊緣特性的邊緣檢測最優(yōu)濾波器,其采用一階微分濾波器。采用二維高斯函數(shù)的任意方向上的一階方向?qū)?shù)為噪聲濾波器,通過與圖像卷積進行濾波;然后對濾波后的圖像尋找圖像梯度的局部最大值,以此來確定圖像邊緣。根據(jù)對信噪比與定位乘積進行測度,得到最優(yōu)化逼近算子,這就是Canny邊緣檢測算子。類似與Marr(LOG)邊緣檢 測方法,也屬于先平滑后求導(dǎo)數(shù)的方法。

3、2 Canny邊緣檢測算法數(shù)學(xué)描述stepl:用高斯濾波器平滑圖象。二維為高斯函數(shù)為式中:n式方向矢量,是梯度矢量。將圖像 f(x,y)與Gn作卷積,同時改變 n的方 向,Gn*f(x,y)取得最大值時的n就是正交于檢測邊緣的方向。step2:用一階偏導(dǎo)的有限差分來計算梯度的幅值和方向。A(x,y)反映了圖像(x,y)點處的邊緣強度,B是圖像(x,y)點處的法向矢量。step3:對梯度幅值進行非極大值抑制。僅僅得到全局的梯度并缺乏以確定邊緣,因此為確定邊緣,必須保存局部梯度最大的點,而抑制非極大值,如圖1。解決方法:利用梯度的方 向。四個扇區(qū)的標(biāo)號為0到3,對應(yīng)3*3鄰域的四種可能組合。在每一

4、點上,鄰域的中心像素M與沿著梯度線的兩個像素相比。如果M的梯度值不比沿梯度線的兩個相鄰像素梯度值大,那么令 M=0,即卩 G(x,y)=NMS(Mx,y, §x,y)。step4:用雙閾值算法檢測和連接邊緣。減少假邊緣段數(shù)量的典型方法是對G(x,y)使用一個閾值,并將低于閾值的所有值賦零值。通常選取閾值的方法:雙閾值算法進行邊緣判別和連接邊緣。 首先是邊緣判別:但凡邊緣強度大于高閾值的一定是邊緣點;但凡邊緣強度小于低閾值的一定不是邊緣點;如果邊緣強度大于低閾值又小于高閾值,那么看這個像素的鄰接像素中有沒有超過高閾值的邊緣點,如果有,它就是邊緣點,如果沒有,它就不是邊緣點。 其次是連接

5、邊緣:雙閾值算法對非極大值抑制圖像作用兩個閾值T1和T 2,且2 T 1t 2,從而可以得到兩個閾值邊緣圖像G1(x,y)和G2(x,y)。由于G2(x,y)使用高閾值得到,因而含有很少的假邊緣,但有間斷(不閉合)。雙閾值法要在 G2(x,y)中把邊緣連接成輪廓, 當(dāng)?shù)竭_輪廓的端點時,該算法就在 G 1(x,y)的8鄰點位置尋找可以連接到輪廓上的邊緣,這樣,算法不斷地在 G1(x,y)中收集邊緣,直到將G1(x,y)連接起來為止。檢測階躍邊緣的根本思想是在圖像中找出具有局部最大梯度幅值的像素點。雖然Canny邊緣檢測算法也有本身的針對性和局限性,但canny算子邊緣檢測算法那么既能濾去噪聲又保

6、持邊緣特性的邊緣檢測的一階微分算法中的最正確選擇方法。3算法過程原始圖像A(x,y)偏導(dǎo)(Bx.By)像邊緣初步得到邊緣點4實現(xiàn)過程1讀入圖像: clear;clc;i=imread('light.jpg');k=rgb2y(i);%獲取h分量,即亮度分量根據(jù)邊緣的定義,邊緣檢測的目的是標(biāo)識數(shù)字圖像中亮度變化明顯的點。又根據(jù)公式 Brightness = 0.3 * R + 0.6 * G + 0.1 * B;計算出亮度分量 y;function k=rgb2y(z)%i必須為rgb三維矩陣m,n ,p=size(z);k=zeros( m,n);z=double(z);for

7、 i=1:mfor j=1: nk(i,j)=0.3*z(i,j,1)+0.6*z(i,j,2)+0.1*z(i,j,3);end end2用3x3高斯濾波器進行濾波,消除噪聲;function j=gaosi(i);%i必須為二維double矩陣j=i;h,w=size(i);for m=2;h-1for n=2:w-1j(m, n)=(i(m, n-1)+2*i(m, n)+i(m, n+1)/4;%橫向高斯濾波endend利用上面自定義的 gaosi函數(shù)對圖像進行二維3x3濾波,k仁gaosi(k);%橫向濾波k1=k1'%對圖像進行轉(zhuǎn)置,為下一步縱向濾波作準(zhǔn)備縱向濾波=轉(zhuǎn)置后橫

8、向濾波k1=gaosi(k1);k1=k1'% 復(fù)原3針對每一個像素,計算橫向與縱向兩方向的微分近似,以得到像素的梯度大小和方向;由就伺到呻度豹大小M和方勺O-Afsqrl '.p"聲+?" 7-0 arctan/p)利用上式,易知p,q分別為計算出的橫向、縱向的微分近似,由此再計算出梯度的大小和方 向。%十算梯度的大小和方向h,w=size(k);for m=2:h-1for n=2:w-1zz1= k1(m, n-1)+k1(m+1, n-1);zz2=k1(m, n)+k1(m+1, n);zz3=k1(m, n-1)+k1(m, n);zz4=k1(

9、m+1, n-1)+k1(m+1, n);kp(m, n)=0.5*(zz2-zz1);kq(m, n)=0.5*(zz3-zz4);kfu(m, n)=sqrt(kp(m, n)2)+(kq(m, n) A2);% 梯度大小kjiao(m, n)=ata n( kq(m, n)/(kp(m, n)+0.001);% 梯度方向防止分母為0end end4對梯度進行非極大抑制"非局部最大值置0;1. 先將梯度方向歸類為四個主要方向,左右、上下、左斜、右斜。%非極大值抑制%首先將梯度方向劃分為 4 個方向 0,45,90,135 以及他們的反向延長線 for m=2:h-1for n=2

10、:w-1if kjiao(m,n)>=3/8*pikjiao(m,n)=2;else if kjiao(m,n)>=1/8*pikjiao(m,n)=1;else if kjiao(m,n)>=-1/8*pikjiao(m,n)=0;else if kjiao(m,n)>=-3/8*pikjiao(m,n)=3;elsekjiao(m,n)=2;endendendendendend根據(jù)劃分后的 4 個方向,判斷該點是否是 8 鄰域的局部最大值梯度方向 ,比方,梯度方 向為左右方向的點,判斷其是否比左右兩點的值來的大,如果不是,使該點的值為 0.%按照各個方向分別判斷k2

11、=k1;for m=2:h-1for n=2:w-1if kjiao(m,n)=0if k1(m,n)>k1(m,n-1)&&k1(m,n)>k1(m,n+1);else k2(m,n)=0;endendif kjiao(m,n)=1if k1(m,n)>k1(m+1,n-1)&&k1(m,n)>k1(m-1,n+1);else k2(m,n)=0;endendif kjiao(m,n)=2if k1(m,n)>k1(m-1,n)&&k1(m,n)>k1(m+1,n);else k2(m,n)=0;endend

12、if kjiao(m,n)=3if k1(m,n)>k1(m-1,n-1)&&k1(m,n)>k1(m+1,n+1);else k2(m,n)=0;endendendend5對梯度取兩次閾值;用兩個閾值 t1 和 t2(t2>t1, 一般取 t2=2*t1), 我們把梯度值小于 t1 的像素的灰度設(shè)為 0, 得 到圖像 1,然后我們把梯度值小于 t2 的像素的灰度設(shè)為 0,得到圖像 2。由于圖像 2 的閾值較 高, 噪音較少 (但同時也損失了有用的邊緣信息 , 而圖像 1的閾值較低 , 保存了較多信息 ,因此 我們可以以圖像 2 為根底 , 以圖像 1 為補充

13、來連接圖像的邊緣。%兩次閾值分割k3=k2;%以t1為閾值分割后的矩陣k4=k2;%以t2為閾值分割后的矩陣t1=50;t2=2*t1;for m=2:h-1for n=2:w-1if kfu(m,n)<t1k3(m,n)=0;endif kfu(m,n)<t2k4(m,n)=0;endendend5對邊緣進行連接;a. 掃描圖像2,當(dāng)我們遇到一個非零值的像素p時(跟蹤以p為開始點的輪廓線直到該輪廓線的終點 q;b. 在圖像1中,考察與圖像2中p點位置對應(yīng)的點p'的8鄰域,如果在p'點的8鄰域中有非 零像素 q' 存在 , 將其包括到圖像 2 中 , 作為點

14、 r, 從 r 開始 ( 重復(fù)第 a 步, 直到我們在圖像 1 和 圖像 2 中都無法繼續(xù)為止 ;c. 我們已經(jīng)結(jié)束了對包含 p 的輪廓線的連接 , 將這條輪廓標(biāo)記為已訪問過 , 回到第 a 步,尋找 下一條輪廓線,重復(fù)第 (a)(b)(c) 步直到圖像 2中再也找不到新輪廓線為止 .findline.m:function ff,flag1=findline(k3,k4,flag,m,n) flag1=flag;m1=m+1;n1=n+1;while(m=m1|n=n1)% 假設(shè) m 和 n 都不發(fā)生變化,說明 line 已到終點 flagg=0;for i=1:3if(flagg=1) br

15、eak;endfor j=1:3if k3(m-2+i,n-2+j)=0 k4(m-2+i,n-2+j)=255; m1=m-2+i;n1=n-2+j;% 新的 m,n 點 flag1(m,n)=1;% 標(biāo)記已檢測過 flagg=1;break;endendendm=m1;n=n1;endff=k4;主函數(shù)里寫上:figure;subplot(221);imshow(i);title(' 原圖像 '); subplot(222);imshow(k3,);title(' 閾值為 50 的分割圖像 '); subplot(223);imshow(k4,);title

16、(' 閾值為 100 的分割圖像 '); flag=zeros(h,w);% 標(biāo)記該點是否以檢測過, 1 表示檢測過 for m=2:h-1for n=2:w-1if k4(m,n)=0&&flag(m,n)=0 k4,flag=findline(k3,k4,flag,m,n);endendend subplot(224);imshow(k4,);title(' 修正后的分割圖像 ');5結(jié)果顯示S X - Q 囲口縛沮士a的丁荀臣芻產(chǎn)下“掃-茫値止 TBijif. rawle ECft Vie/* Insist Toot Oektaa rMtto典.H創(chuàng)p _ -Zj J 鳥6總結(jié)和體會通過完成這次數(shù)字圖像的大作業(yè),對canny算子的原理及算法有了更加清晰的認識。并通過實際的運行程序,對課上所學(xué)到的知識有了更加深刻和直觀的了解。這學(xué)期學(xué)習(xí)了數(shù)字圖像處理這門課程,對各種圖像處理方法有了一些根本的了解,并學(xué)習(xí)了 matlab圖像處理的一些根本應(yīng)用方法。在使用matlab后,給我的感覺就是這個軟件

溫馨提示

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

評論

0/150

提交評論