資源描述:
《程序-圖像邊緣提取算法研究》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、圖像邊緣提取算法研究報告概述圖像的邊緣包含了圖像最重要的信息。什么是邊緣?一般是指圖像灰度變化率最大的位置。從成因上看,一般圖像邊緣主要由四個方面的因素形成:(1)圖像灰度在表面法向變化的不連續(xù)造成的邊緣;(2)圖像對像素在空間上不一致形成的邊緣;(3)在光滑的表面上由于顏色的不一致形成的邊緣:(4)物體的光影造成的邊緣。圖像邊緣提取的作用有:(1)改良圖像質(zhì)量;(2)分離對象;(3)理解和重構(gòu)視覺場景;(4)識別特征;(5)其他。圖像邊緣檢測是圖像處理與計算機視覺共同的基本課題,1960年以來,相繼發(fā)展了一系列采用梯度算子和拉普
2、拉斯算子的邊緣檢測技術(shù);為了降低圖像噪聲對邊緣檢測算法的干擾,1980年以來,又建立了高斯低通濾波與拉普拉斯算子復(fù)合的過零點檢測Marr-Hildreth理論;在另一個方向上,1980年代初期,Canny從信號處理的角度出發(fā),使邊緣檢測算法更具有實用性。本報告主要介紹以上以上幾個方面的內(nèi)容,通過matlab程序?qū)崿F(xiàn)以上幾種算法,對比各種算法的性能。算法介紹及相應(yīng)程序一、基于微分算子的邊緣檢測檢測圖像邊緣信息,可以把圖像看做曲面,邊緣就是圖像的變化最劇烈的位置。這里所講的邊緣信息包含兩個方面:一是邊緣的具體位置,即像素的坐標;而是邊
3、緣的方向。微分算子有兩個重要性質(zhì):定域性(或局部性)、敏感性(或無界性)。敏感性就是說,它對局部的函數(shù)值變化很敏感,但是因其對變化過于敏感又有了天然的缺陷——不能抵抗噪聲。局部性意思是指,每一點的導(dǎo)數(shù)只與函數(shù)在該點鄰近的信息有關(guān)。主要有兩大類基于微分算子的邊緣檢測技術(shù):一階微分算子邊緣檢測與二階微分算子邊緣檢測。這些檢測技術(shù)采用以下的基本步驟:(1)將相應(yīng)的微分算子簡化為離散的差分格式,進而簡化為模板(記為T)。(2)利用模板對圖像f(m,n)進行運算,獲得模板作用后的結(jié)果Tf(m,n)。(3)提出閾值h,在采用一階微分算子情形記
4、錄下高于某個閾值h的位置坐標(而采用二階微分算子情形,一般是對某個閾值確立)(4)對集合進行整理,同時調(diào)整閾值h。Roberts算子Roberts算子是一種利用局部差分算子尋找邊緣的算子,兩個模板分別為則,==算法的步驟為:(1)首先用兩個模板分別對圖像作用得到和;(2)對,進行閾值判決,若大于閾值則相應(yīng)的點位于便于邊緣處。對于閾值選取的說明:由于微分算子的檢測性能受閾值的影響較大,為此,針對具體圖像我們采用以下閾值的選取方法,對處理后的圖像統(tǒng)計大于某一閾值的點,對這些數(shù)據(jù)求平均值,以下每個程序均采用此方法,不再做說明。具體程序如
5、下:%-----filename:Roberts.m-------------------------%-----Useage:edgedetectingbytheRobertsoperator-----%-----Writer:Subailong-------------------------functionedgeRb=Roberts(oimage);[xlenylen]=size(oimage);%readthesizeedgeX=zeros(xlen,ylen);%horizontaldirectionedgeY=zer
6、os(xlen,ylen);%verticaldirectionedgeXY=zeros(xlen,ylen);%synthesizethetwodirections%--------------processtheoringinimagewiththeoperator----------------fori=1:xlen-1forj=1:ylen-1edgeX(i,j)=oimage(i,j)-oimage(i+1,j+1);edgeY(i,j)=oimage(i+1,j)-oimage(i,j+1);endendedgeX=a
7、bs(edgeX);edgeY=abs(edgeY);edgeXY=sqrt(edgeX.*edgeX+edgeY.*edgeY);%---------Threshestimate--------------------rsum=0;counter=0;fori=2:xlen-1forj=2:ylen-1if(edgeXY(i,j)>15)rsum=rsum+edgeXY(i,j);counter=counter+1;endendendthreshold=rsum/counter;%threshold=2*sum(sum(edge
8、XY(1:xlen-1,1:ylen-1)))/((xlen-1)*(ylen-1));%-------edgedetecting---------------fori=1:xlen-1forj=1:ylen-1if(edgeXY(i,j)>thr