數(shù)字圖像處理與深度學習技術應用 課件 第6、7章 圖像平滑處理、圖像邊緣銳化處理_第1頁
數(shù)字圖像處理與深度學習技術應用 課件 第6、7章 圖像平滑處理、圖像邊緣銳化處理_第2頁
數(shù)字圖像處理與深度學習技術應用 課件 第6、7章 圖像平滑處理、圖像邊緣銳化處理_第3頁
數(shù)字圖像處理與深度學習技術應用 課件 第6、7章 圖像平滑處理、圖像邊緣銳化處理_第4頁
數(shù)字圖像處理與深度學習技術應用 課件 第6、7章 圖像平滑處理、圖像邊緣銳化處理_第5頁
已閱讀5頁,還剩249頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第6章圖像平滑處理6.1概述概述圖像平滑或濾波目的是消除噪聲,降低干擾,改善圖像質量。圖像平滑常用的方法是采用區(qū)域處理,利用相鄰的像素值,進行均值濾波或中值濾波。6.1平滑處理的基本方法圖像在獲取、傳輸過程中,受干擾的影響,會產噪聲,噪聲干擾正常信號。造成圖像毛糙。圖像去噪是一種信號濾波的方法,目的是保留有用信號,去掉噪音信號。噪聲是隨機產生的,分布不規(guī)則,大小也不規(guī)則。噪聲像素的灰度是空間不相關,與鄰近像素顯著不同。圖像噪聲噪聲

(a)隨機噪聲

(b)椒鹽噪聲

一幅圖像往往受到各種噪聲的干擾,噪聲常為一些孤立的像素點,往往是疊加在圖像上的隨機噪聲,像雪花使圖像被污染,而圖像灰度應該相對連續(xù)變化的,一般不會突然變大或變小,這種噪聲可以用鄰域平均法使它得到抑制。鄰域平均法(均值濾波)鄰域平均法是一種利用模板對圖像進行模板操作(卷積運算)法,常用的3×3和5×5模板如下:鄰域平均法鄰域平均法是一種利用模板對圖像進行模板操作(卷積運算)的方法(b)5x5模版鄰域平均法也叫均值濾波,是對待處理的像素給定一個模板,該模板包括了其周圍的鄰近像素,用模板中的全體像素的均值來替代原來的像素值。(a)3x3模版鄰域平均法鄰域平均法:通過一點和鄰域內像素點求平均來去除突變的像素點,優(yōu)點是算法簡單,計算速度快,代價是會造成圖像一定程度上的模糊。鄰域平均法存在的問題如果窗口內各點的噪聲是獨立等分布的,經過這種方法平滑后,信噪比可提高倍。在此算法中,M,N的值不宜過大,因為M,N值的大小對速度有直接影響,且M,N值越大變換后的圖像越模糊,特別是在邊緣和細節(jié)處。鄰域平均法存在的問題可以抑制高頻成分,但也使圖像變得模糊。平滑效果不好,減少噪音的同時,損失了高頻信息。鄰域平均法存在的問題效果展示鄰域平均法是一種利用模板對圖像進行模板操作(卷積運算)法,常用的3×3和5×5模板如下:鄰域平均法鄰域平均法:,代價是會造成圖像一定程度上的模糊。鄰域平均法存在的問題M,N值越大變換后的圖像越模糊,特別是在邊緣和細節(jié)處。鄰域平均法存在的問題按照與中心點的距離不同,賦予像素點不同的權值,靠近中心點的權重值較大,遠離中心點的權重值較小,在此基礎上計算鄰域內各個像素值不同權重的和。

Gaussian平滑法鄰域處理---模板1)將模板在圖中漫游,并將模板中心與圖中某個像素位置重合;2)將模板上系數(shù)與模板下對應像素相乘;3)將所有乘積相加;4)將和賦給圖中對應模板中心位置的像素。卷積步驟卷積的處理過程卷積的處理過程為得到一幅經過完整的經過濾波處理的圖像,必須對x=0,1,2,…,M-1和y=0,1,2,…,N-1依次應用公式。在M×N的圖像f上,用m×n大小的掩模:其中a=(m-1)/2且b=(n-1)/2,處理的掩模長與寬都為奇數(shù)。簡化表達形式:3×3的掩模:模板操作“-”表示無法進行模板操作的像素點。卷積運算的邊界問題?邊界問題的解決1)忽略圖像邊界數(shù)據(jù);多采用該方法。2)在圖像四周復制原圖像邊界像素的值,從而使卷積核懸掛在圖像四周時可以進行正常的計算。3)計算出來的像素值的超出范圍問題,對此可簡單地將其值置為0或255。邊界問題的解決中值濾波法中值濾波:抑制噪聲又要保持細節(jié)。將窗口中奇數(shù)個數(shù)據(jù)按大小順序排列,處于中心位置的那個數(shù)作為處理結果。取3X3窗口從小到大排列,取中間值中值濾波法3×3模板:中間值序號是5。5×5模板:中間值序號是13。7×7模板:中間值序號是25。9×9模板:中間值序號是41。模板操作中值濾波幾種常用窗口中值濾波幾種常用窗口均值濾波器對高斯噪聲的濾波效果較好,對椒鹽噪聲的濾波效果不好。中值濾波器對椒鹽噪聲的濾波效果較好,對高斯噪聲的濾波效果不好。均值濾波器對高斯噪聲的濾波效果較好,對椒鹽噪聲的濾波效果不好。中值濾波器對椒鹽噪聲的濾波效果較好,對高斯噪聲的濾波效果不好。高斯濾波Python實現(xiàn)cv2.GassianBlur()函數(shù)來實現(xiàn)圖像的高斯濾波。dst=cv2.GassianBlur(src,ksize,sigmaX,sigmaY,borderType)dst表示返回的高斯濾波處理結果。src表示原始圖像,該圖像不限制通道數(shù)目。ksize表示濾波卷積核的大小,奇數(shù)。sigmaX--卷積核在水平方向上的權重值。sigmaY--卷積核在垂直方向上的權重值。borderType表示以哪種方式處理邊界值。

importcv2ascvimage=cv.imread("F:/picture/g1.jpg")#讀取一幅圖像cv.imshow("image",image)#顯示原圖#定義卷積和為5*5,gauss=cv.GaussianBlur(image,(5,5),0,0)cv.imshow("gauss",gauss)#顯示濾波后的圖像

均值濾波Python實現(xiàn)cv2.blur()函數(shù)來實現(xiàn)圖像的均值濾波。dst=cv2.blur(src,ksize,anchor,borderType)dst--返回的均值濾波處理結果。src--原始圖像,該圖像不限制通道數(shù)目。ksize--濾波卷積核的大小。anchor---其默認值為(-1,-1),卷積核中心點。borderType表示以哪種方式處理邊界值。

【例】importcv2ascvimage=cv.imread("F:/picture/g1.jpg")#讀取一幅圖像cv.imshow("image",image)#顯示原圖means5=cv.blur(image,(5,5))#定義卷積和為5×5,實現(xiàn)均值濾波means10=cv.blur(image,(10,10))#定義卷積和10×10,實現(xiàn)均值濾波means20=cv.blur(image,(20,20))#定義卷積和20×20,實現(xiàn)均值濾波

隨著卷積核的增大,圖像的失真情況越來越嚴重。

在方框濾波中,可以選擇是否對均值濾波的結果進行歸一化,即可以選擇濾波結果是鄰域像素值之和的平均值,還是鄰域像素值之和。

方框濾波方框濾波Python實現(xiàn)cv2.boxFilter()函數(shù)來實現(xiàn)圖像的方框濾波。dst=cv2.boxFilter(src,depth,ksize,anchor,normalize,borderType)dst:返回的方框濾波處理結果。src:原始圖像,該圖像不限制通道數(shù)目。depth:處理后圖像的深度,-1表示與原始圖像相同的深度。ksize:濾波卷積核的大小。anchor:圖像處理的錨點,默認(-1,-1),卷積核中心點。normalize:是否進行歸一化操作。borderType:以哪種方式處理邊界值。

#定義卷積和為5*5,-1深度與原圖同,normalize=0不進行歸一化box5_0=cv.boxFilter(image,-1,(5,5),normalize=0)box2_0=cv.boxFilter(image,-1,(2,2),normalize=0)#定義卷積和為5*5,normalize=1進行歸一化box5_1=cv.boxFilter(image,-1,(5,5),normalize=1)#定義卷積和為2*2,normalize=1進行歸一化box2_1=cv.boxFilter(image,-1,(2,2),normalize=1)cv.imshow("box5_0",box5_0)#顯示濾波后的圖像

中值濾波Python實現(xiàn)cv2.medianBlur()函數(shù)來實現(xiàn)圖像的中值濾波。dst=cv2.medianBlur(src,ksize)dst表示返回的方框濾波處理結果。src表示原始圖像,該圖像不限制通道數(shù)目。ksize表示濾波卷積核的大小。importcv2ascvimage=cv.imread("F:/picture/jiao1.jpg")#讀取一幅圖像cv.imshow("image",image)#顯示原始圖像#使用卷積核為5*5的中值濾波median=cv.medianBlur(image,5)cv.imshow("median",median)#顯示濾波結果cv.waitKey()cv.destroyAllWindows()中值濾波可以有效地處理椒鹽噪聲,而且不會產生圖像模糊的現(xiàn)象。高斯濾波以距離為權重,設計濾波系數(shù),只考慮空間位置上的關系,丟失邊緣的信息。雙邊濾波在高斯基礎上,疊加了像素值的考慮,非線性濾波,對保留邊緣更有效。

6.6雙邊濾波空間距離:當前點距離濾波模板中心點的歐式距離?;叶染嚯x:當前點距離濾波模板中心點的灰度的差值的絕對值雙邊濾波的核函數(shù)是空間域核與像素范圍域核的綜合結果:1)平坦區(qū)域,變化很小,差值接近于0,范圍域權重接近于1,空間域權重起作用,相當于進行高斯模糊;2)邊緣區(qū)域,像素差值大,像素范圍域權重變大,即使距離遠空間域權重小,加上像素域權重總的系數(shù)也較大,從而保護了邊緣的信息。在突變的邊緣上,使用了像素差權重,所以很好的保留了邊緣。雙邊濾波Python實現(xiàn)cv2.bilateralFilter()實現(xiàn)圖像的雙邊濾波。dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)dst:返回的雙邊濾波處理結果。src:原始圖像,該圖像不限制通道數(shù)目。d:空間距離參數(shù),以當前像素點為中心點的半徑。一般取5。sigmaColor:雙邊濾波時選取的色差范圍。sigmaSpace:坐標空間sigma值,越大,越多點濾波。borderType:以何種方式處理邊界

importcv2ascvimage=cv.imread("F:/picture/luot.jpg")#讀取一幅圖像cv.imshow("image",image)#顯示原始圖像gauss=cv.GaussianBlur(image,(55,55),0,0)#對圖像進行高斯濾波bilateral=cv.bilateralFilter(image,55,100,100)#對圖像進行雙邊濾波

雖然OpenCV提供了多種濾波方式來實現(xiàn)平滑圖像的效果,希望使用特定的卷積核實現(xiàn)卷積操作,自定義卷積核實現(xiàn)圖像的平滑處理。

6.72D卷積核的實現(xiàn)自定義卷積核Python實現(xiàn)在OpenCV中,允許用戶使用實現(xiàn)卷積操作dst=cv2.filter2D(src,d,kernel,anchor,delta,borderType)dst:返回的雙邊濾波處理結果。src:原始圖像,該圖像不限制通道數(shù)目。d:處理結果圖像的圖像深度,-1表示與原始圖像相同深度。kernel:一個單通道的卷積核。anchor:圖像處理的錨點,(-1,-1)位于卷積核中心點。delta:修正值,可選。會在濾波的基礎上加上該值果。borderType:以何種情況處理邊界。

image=cv.imread("F:/picture/lena.png")#讀取一幅圖像cv.imshow("image",image)#顯示原始圖像k1=np.ones((13,13),np.float32)*3/(13*13)#13×13卷積核k2=np.ones((9,9),np.float32)*2/81#9×9的卷積核k3=np.ones((5,5),np.float32)/25#5×5的卷積核out1=cv.filter2D(image,-1,k1)#13×13卷積核進行濾波cv.imshow("out1",out1)#顯示濾波后的圖像cv.imshow("out2",out2)#顯示濾波后的圖像6.2噪聲消除法6.2.1二值圖像的黑白點噪聲濾波用3×3模板的均值進行濾波:當f(i,j)周圍的8個像素的平均值為a時,若|f(i,j)-a|>127.5,

則對f(i,j)的黑白進行翻轉;若不到127.5,則f(i,j)不變。

二值圖像的黑白點噪聲濾波二值圖像的黑白點噪聲濾波該方法相當于如下3×3模板:1)取得圖像大小、數(shù)據(jù)區(qū),并把數(shù)據(jù)區(qū)復制到緩沖區(qū)中;2)循環(huán)取得各點像素值;3)取得該點周圍8像素值的平均值;4)平均值與該點像素值相比,若大于127.5則把該點顏色反轉;實現(xiàn)步驟for(intj=1;j<height-1;j++)for(inti=1;i<wide-1;i++){averg=0; averg=(int)((p_data[(j-1)*wide+(i-1)]+p_data[(j-1)*wide+i]+p_data[(j-1)*wide+(i+1)]+p_data[j*wide+(i-1)] +p_data[j*wide+i+1]+p_data[(j+1)*wide+(i-1)]+p_data[(j+1)*wide+i]+p_data[(j+1)*wide+i+1])/8);

if(abs(averg-p_temp[j*wide+i])>127.5) p_temp[j*wide+i]=averg;}

(a)原圖(b)二值圖像的黑白點噪聲濾波二值圖像的黑白點噪聲濾波效果圖函數(shù)說明(1)retval=image.getdata(band=None)將此圖像的內容作為一個包含像素值的序列對象返回。該序列對象是平鋪的,所以第一行的值直接跟在第0行的值之后,以此類推。retval:包含像素值的序列的對象;band:返回頻段。默認是返回所有波段。要返回單個波段,需要傳入索引值(例如,從“RGB”圖像中獲得“R”波段,則索引值為0)。(2)retval=image.putpixel(xy,color)用于修改x,y處的像素。retval:返回一個修改后的圖像;xy:像素坐標,以(x,y)的形式給出;value:像素值。效果展示6.2.2消除孤立黑像素點在二值圖像中,消除孤立于周圍的黑像素點(變成白的)。*****

**

*****四鄰域八鄰域在4點鄰域的情況下,若黑像素f(i,j)的上下左右4個像素全為白,則f(i,j)為白。在8點鄰域法相似。消除孤立黑像素點1)取得圖像大小、數(shù)據(jù)區(qū),并把數(shù)據(jù)區(qū)復制到緩沖區(qū)中;2)循環(huán)取得各點像素值;3)判斷為4連接或8連接;4)為4連接時,若該點上下左右4個像素全為白,則該點置白,8鄰域處理法相似。實現(xiàn)步驟if(connec==4){ for(intj=1;j<height-1;j++) for(inti=1;i<wide-1;i++) { if(*(p_temp+wide*j+i)==255) continue;if((*(p_temp+wide*(j-1)+i)+*(p_temp+wide*(j+1)+i)+*(p_temp+wide*j+i-1)+*(p_temp+wide*j+i+1))==255*4) *(p_data+wide*j+i)=255; }}(a)原圖

(b)4連接(c)8連接效果圖效果展示6.3應用技術6.3.13×3均值濾波理論基礎理論基礎在f(i,j)上按行(或列)對每個像素選取3×3尺寸的鄰域,并用鄰域中鄰近像素的平均灰度來置換這一像素值。函數(shù)說明retval=cv2.blur(src,ksize,anchor,borderType)retval:表示返回的均值濾波處理結果;src:表示原始圖像,該圖像不限制通道數(shù)目;ksize:表示濾波卷積核的大小;anchor:表示圖像處理的錨點,其默認值為(-1,-1),表示位于卷積核中心點,通常直接使用默認值即可;borderType:表示以哪種方式處理邊界值,通常直接使用默認值即可。效果展示圖6-8圖像3x3鄰域平均法效果圖6.3.2N×N均值濾波理論基礎在本程序中當灰度圖像f中以像素f(i,j)為中心的N×N屏蔽窗口(N=3,5,7,…)內平均灰度值為a時,無條件做f(i,j)=a處理,N由用戶給定,且取N值越大,噪聲減少越明顯。但“平均”是以圖像的模糊為代價的。圖像7×7均值濾波效果6.3.3超限鄰域平均法理論基礎為了減少模糊效應,找到清除噪聲和邊緣模糊這對矛盾的最佳統(tǒng)一。閾值的鄰域平均法以某個灰度值T作為閾值,如果某個像素的灰度大于其鄰近像素的平均值,并超過閾值,才使用平均灰度置換這個像素灰度:(6-1)函數(shù)說明retval=cv2.cvtColor(src,code[,dstCn])retval:表示與輸入值具有相同類型和深度的輸出圖像;src:表示原始輸入圖像;code:是色彩空間轉換碼,常見的枚舉值有cv2.cvtColor_BGR2RGB、cv2.cvtColor_BGR2GRAY、cv2.cvtColor_BGR2HSV、cv2.cvtColor_BGR2YCrCb、cv2.cvtColor_BGR2HLS;dstCn:表示目標圖像的通道數(shù)。

效果展示本例選取閾值為10。6.3.4方框濾波理論基礎除均值濾波之外,OpenCV還提供了方框濾波的方式。與均值濾波的不同在于,方框濾波不僅僅只計算像素均值,兩種方式選擇計算:函數(shù)說明dst=cv2.boxFilter(src,depth,ksize,anchor,normalize,borderType)dst:表示返回的方框濾波處理結果;src:表示原始圖像,該圖像不限制通道數(shù)目;depth:表示處理后圖像的深度,一般使用-1表示與原始圖像相同的深度;ksize:表示濾波卷積核的大??;anchor:錨點,其默認值為(-1,-1),表示位于卷積核中心點;normalize:表示是否進行歸一化操作;borderType:表示以哪種方式處理邊界值。效果展示(a)原圖(b)5x5未歸一化方框濾波結果效果展示(c)2X2為歸一化方框濾波結果(d)5x5歸一化方框濾波結果(e)2x2歸一化方框結果6.4高斯濾波理論基礎在高斯濾波中,按照與中心點的距離的不同,賦予像素點不同的權重值,靠近中心點的權重值較大,遠離中心點的權重值較小,在此基礎上計算鄰域內各個像素值不同權重值的和函數(shù)說明dst=cv2.GassianBlur(src,ksize,sigmaX,sigmaY,borderType)dst:表示返回的高斯濾波處理結果;src:表示原始圖像,該圖像不限制通道數(shù)目;ksize:卷積核的大小,需要注意的是濾波卷積核的數(shù)值必須是奇數(shù)。sigmaX:表示卷積核在水平方向上的權重值。sigmaY:表示卷積核在垂直方向上的權重值。

borderType:表示以哪種方式處理邊界值。效果展示6.5中值濾波中值濾波將窗口中奇數(shù)個數(shù)據(jù)按大小順序排列,處于中心位置的那個數(shù)作為處理結果。一般采用一個含有奇數(shù)個點的滑動窗口,將窗口中各點灰度值的中值來替代指定點圖像中值濾波示意圖如圖6-14所示,取3×3窗口,從小到大排列:33200201202205206207208210

取中間值205,代替原來的數(shù)值202

中值濾波實現(xiàn)步驟:①將模板在圖中漫游,并將模板中心與圖中某個像素位置重合;②讀取模板下各對應像素的灰度值;③將這些灰度值從小到大排成1列;④找出這些值里排在中間的1個;(5)將這個中間值賦給對應模板中心位置的像素。中值濾波器對椒鹽噪聲的濾波效果較好,對高斯噪聲的處理效果不好。6.5.1N×N中值濾波理論基礎本程序計算灰度圖像f中以像素f(i,j)為中心的N×N屏蔽窗口(N=3,5,7,…)內灰度的中值為u,無條件做f(i,j)=u處理,n由用戶給定。函數(shù)說明在OpenCV中提供了cv2.medianBlur()函數(shù)來實現(xiàn)圖像的中值濾波。其一般格式為:retval=cv2.medianBlur(src,ksize)retval:表示返回的方框濾波處理結果;src:表示原始圖像,該圖像不限制通道數(shù)目;ksize:表示濾波卷積核的大小。效果展示6.5.2十字型中值濾波理論基礎本程序計算灰度圖像f中以像素f(i,?j)為中心的十字形屏蔽窗口內灰度值的中值u,無條件做f(i,?j)=u處理,N由用戶給定。效果展示6.5.3

N×N最大值濾波理論基礎本程序計算灰度圖像f中以像素f(i,?j)為中心的N×N屏蔽窗口(N=3,5,7,…)內灰度的中值為u,無條件做f(i,j)=u處理,n由用戶給定。函數(shù)說明(1)retval=cv2.copyMakeBorder(src,top,bottom,left,right,borderType)用來給圖片添加邊框。retval:返回帶邊框的圖像;src:要處理的原圖;top,bottom,left,right:上下左右要擴展的像素數(shù);borderType:邊框類型,(2)min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(ret)該函數(shù)用來找出矩陣中的最大值和最小值以及對應的坐標位置。min_val:最小值;max_val:最大值;min_loc:最小值坐標;max_loc:最大值坐標;ret:輸入矩陣。效果展示6.6雙邊濾波理論基礎雙邊濾波將濾波器的權系數(shù)分解設計為空域濾波器的權系數(shù)和圖像亮度差的權系數(shù)空間距離:當前點距離模板中心點的歐式距離Wd為灰度距離:當前點距離模板中心點的灰度差值的絕對值Wr為雙邊濾波器:

理論基礎雙邊濾波卷積表示為

表示為歸一化因子,S為卷積范圍。綜合結果:①平坦區(qū)域,變化很小,差值接近于0,范圍域權重接近于1,空間域權重起作用,相當于進行高斯模糊;②邊緣區(qū)域,像素差值大,像素范圍域權重變大,即使距離遠空間域權重小,加上像素域權重總的系數(shù)也較大,從而保護了邊緣信息。在突變的邊緣上,使用了像素差權重,所以很好的保留了邊緣。函數(shù)說明dst=cv2.bilateralFilter(src,d,sigmaColor,sigmaSpace,borderType)dst:表示返回的雙邊濾波處理結果;src:表示原始圖像,該圖像不限制通道數(shù)目;d:表示在濾波時選取的空間距離參數(shù),表示以當前像素點為中心點的半徑,在實際應用中一般選取5;sigmaColor:表示雙邊濾波時選取的色差范圍;sigmaSpace:表示坐標空間中的sigma值,值越大,越多的點參與濾波;borderType:表示以何種方式處理邊界。效果展示

(a)原圖(b)高斯濾波(c)雙邊濾波6.7

2D卷積核的實現(xiàn)理論基礎2D卷積核都能方便地設置卷積核的大小和數(shù)值。函數(shù)說明dst=cv2.filter2D(src,d,kernel,anchor,delta,borderType)dst:表示返回的雙邊濾波處理結果;src:表示原始圖像,該圖像不限制通道數(shù)目;d:表示處理結果圖像的圖像深度,一般使用-1表示與原始圖像使用相同的圖像深度;kernel:表示一個單通道的卷積核;anchor:錨點,其默認值為(-1,-1),表示位于卷積核中心點;delta:修正值,可選。如存在,濾波的基礎上加上該值;borderType:表示以何種情況處理邊界。效果展示(a)原圖(b)ksize=13效果展示(c)ksize=9(d)ksize=5作者楊淑瑩敬上謝謝!第7章圖像邊緣銳化處理7.1概述邊緣:指灰度值發(fā)生急劇變化的地方邊緣檢測目的:在不破壞信息的條件下,減少數(shù)據(jù)量,繪制出其邊緣線圖。圖像梯度:計算的是圖像的邊緣信息,它能夠反映圖像像素變化的速度,如灰度值變化大,梯度值大;灰度值變化小,梯度值小。圖像梯度:像素的一階導數(shù),通過計算像素值的差來近似導數(shù)值。圖像梯度及邊緣檢測圖像銳化圖像銳化圖像銳化常見的邊緣類型

階梯狀

脈沖狀

屋頂狀用差分定義一元函數(shù)f(x)二階微分:

用差分定義一元函數(shù)f(x)一階微分:一階、二階微分運算G(i,j)=f(i,j)-f(i-1,j)單向微分運算G(i,j)=-f(i,j-1)+f(i,j)單向微分運算

對灰度圖像f在縱方向進行微分,按下式求得:

G(i,j)=f(i,j)-f(i-1,j)縱向微分運算該算法的數(shù)學表達式為:G(i,j)=f(i,j)-f(i,j-1)橫向微分運算對灰度圖像f在縱方向和橫方向兩個方向進行微分。同時增強水平和垂直方向的邊緣。G(i,j)=sqrt{[f(i,j)-f(i,j-1)]*[f(i,j)-f(i,j-1)]+[f(i,j)-f(i-1,j)]*[f(i,j)-f(i-1,j)]}雙向一次微分運算

相減的結果反映了圖像亮度變化率的大小。像素值保持不變的區(qū)域,相減的結果為零,即像素為黑;像素值變化劇烈的區(qū)域,相減后得到較大的變化率,像素灰度值差別越大,則得到的像素就越亮,圖像的垂直邊緣得到增強。微分運算作用圖像微分后處理計算結果出現(xiàn)了小于零的像素值整體加一個正數(shù),可以獲得類似浮雕的效果。取絕對值圖像一階微分X方向Y方向雙向梯度是1個矢量,由分別沿x和y方向計算微分的結果構成。梯度運算Robert提出的交叉微分算子Z1Z2Z3Z4Z5Z6Z7Z8Z9-10010-110Sobel

算子Z1Z2Z3Z4Z5Z6Z7Z8Z9-1-2-1000121-101-202-101133Z1Z2Z3Z4Z5Z6Z7Z8Z9-1-1-1000111-101-101-101Prewitt算子梯度銳化模板-1-1-1000111-101-101-101-1-2-1000121-101-202-101用于邊緣增強的梯度法二元圖像函數(shù)f(x,y)的拉普拉斯變換:x方向y方向由以上兩個分量相加:二階微分—拉普拉斯算子擴展方式二階微分—拉普拉斯算子強調突變,弱化慢變。二階微分—拉普拉斯算子將原始圖像和拉普拉斯圖像疊加在一起的,保持銳化處理的效果,又能復原背景信息。二階微分—拉普拉斯算子二階微分—拉普拉斯算子掩模實現(xiàn)二階微分—拉普拉斯算子高斯-拉普拉斯(LOG)算子是效果更好的邊緣檢測器,把高斯平滑器和拉普拉斯銳化結合起來,先平滑掉噪聲,再進行邊緣檢測。高斯-拉普拉斯(LOG)算子LOG算子中心點的距離與位置加權系數(shù)的關系高頻提升濾波器微分運算可用來求信號的變化率,具有加強高頻分量的作用,微分處理后的圖像非常暗,不適用。如果既要求圖像的輪廓清晰,又要求保持目標物體的內部灰度不變,這就是高頻提升濾波器的目的。微分運算會使低頻成分損失很多,而高頻成分突出,為了使圖像邊緣清晰,內容完整保留,用下式:高頻提升濾波器線性銳化濾波與高頻提升濾波

采用多個邊緣檢測算子,不同的檢測算子模板采用不同的方向、不同的鄰域導數(shù),用求卷積的方法,計算每個模板,取最大值。自適應檢測將所有模板逐一作用于每一個像素,產生最大輸出值的模板方向,表示該點邊緣方向,如果所有方向上的模板接近于零,該點沒有邊緣;如果所有方向上的模板輸出值近似相等,沒有可靠邊緣方向。實現(xiàn)步驟Kirsch邊緣檢測算子151銳化算子小結

好的檢測結果:對邊緣的錯誤檢測率要低,在檢測出真實邊緣的同時,避免檢測出虛假的邊緣。好的邊緣定位精度:標記的邊緣位置要和圖像上真正邊緣的位置盡量接近。對同一邊緣要有低的響應次數(shù):有的算子會對一個邊緣會產生多個響應。本來只有一個邊緣點,可是檢測出來會出現(xiàn)多個邊緣點??朔肼暤挠绊?。152算子比較

Roberts算子:利用局部差分算子尋找邊緣,邊緣定位精度較高,但容易丟失一部分邊緣,同時由于圖像沒經過平滑處理,因此不具備能抑制噪聲能力。對陡峭邊緣且含噪聲少的圖像效果較好。Sobel算子和Prewitt算子:先做加權平滑處理,再做微分運算,平滑部分的權值有些差異,對噪聲具有一定的抑制能力,但不能完全排除虛假邊緣。雖然這兩個算子邊緣定位效果不錯,但檢測出的邊緣容易出現(xiàn)多像素寬度。算子比較154

Laplacian算子:是不依賴于邊緣方向的二階微分算子,對階躍型邊緣點定位準確,對噪聲非常敏感,使噪聲加強,容易丟失一部分邊緣的方向信息,造成一些不連續(xù)的檢測邊緣。算子比較155算子比較

LOG算子:先用高斯函數(shù)平滑濾波,后用Laplacian算子檢測邊緣,克服Laplacian算子抗噪聲差的缺點,但同時也平滑掉比較尖銳的邊緣,尖銳邊緣無法檢被測到。隨堂測試以下銳化算子中,屬于二階算子的是ARoberts梯度算子BSobel算子CPrewitt算子DLaplacian算子7.2圖像微分邊緣檢測7.2.微分技術應用7.2.1微分邊緣檢測

微分運算作用效果微分運算應用在圖像上,可使圖像的輪廓清晰??v向微分運算;橫向微分運算;雙方向一次微分運算。

微分運算作用效果微分運算作用相減的結果反映了圖像亮度變化率的大小。像素值保持不變的區(qū)域,相減的結果為零,即像素為黑;像素值變化劇烈的區(qū)域,相減后得到較大的變化率,像素灰度值差別越大,則得到的像素就越亮,邊緣得到增強微分運算縱向微分運算對灰度圖像f在縱方向進行微分,按下式求得:7.2.2縱向邊緣檢測理論基礎對灰度圖像f在縱向進行微分操作:(7-1)這里i代表列,j代表行。該算法用如下卷積核:

7.2.3橫向邊緣檢測理論基礎對灰度圖像f在橫向進行微分:

該算法用如下卷積核:

對灰度圖像在橫向方向進行微分,圖像的橫向水平邊緣得到檢測。7.2.4雙向邊緣檢測理論基礎對灰度圖像在縱向和橫向進行微分,結果圖像的縱向和橫向的邊緣得到檢測。該算法用如下卷積核:

水平(i方向)垂直(j方向)效果展示

(a)原圖(b)縱向微分

(c)橫向微分(d)雙向一次微分7.3常用的邊緣檢測算子7.3.1Roberts邊緣檢測算子一階微分算子作用效果Roberts梯度算子交叉算法無平滑,對噪聲太敏感計算簡單,但沒有清楚的中心點

理論基礎Roberts邊緣算子采用的是對角方向相鄰的兩個像素之差。

該算法的算子如下:(1)retval=cv2.filter2D(src,d,kernel,anchor,delta,borderType)retval:表示返回的雙邊濾波處理結果;src:表示原始圖像,該圖像不限制通道數(shù)目;d:表示處理結果圖像的圖像深度,-1表示與原始圖像使用相同的圖像深度;kernel:表示一個單通道的卷積核;anchor:錨點,其默認值為(-1,-1),中心點;delta:表示修正值,可選。如果該值存在,加上該值作為最終的濾波處理結果;borderType:表示以何種情況處理邊界;函數(shù)說明(2)retval=cv2.addWeighted(src1,alpha,src2,beta,gamma,dtype=-1))這個函數(shù)的作用是計算兩個數(shù)組(圖像陣列)的加權和,把兩張圖片疊加在一起。retval:輸出圖像;src1:第一個圖片陣列;alpha:第一個圖片的權重值;src2:第二個圖片陣列;beta:第二個圖片的權重值;gamma:偏移量;dtype:輸出陣列的可選深度。數(shù)學表達式為:

函數(shù)說明效果展示7.3.2Sobel邊緣檢測算子算法原理Sobel算子包含兩組的矩陣,橫向及縱向模板,將之與圖像進行平面卷積,得出橫向及縱向的灰度差分近似值。Sobel算子是典型的基于一階導數(shù)的邊緣檢測算子算子中引入了類似局部平均的運算,對噪聲具有平滑作用,能很好地消除噪聲的影響。

Sobel算子Python實現(xiàn)dst=cv2.Sobel(src,ddepth,dx,dy[,ksize[,scale[,delta[,borderType]]]])·ddepth表示輸出圖像的深度?!x表示x方向上求導的階數(shù)?!y表示y方向上求導的階數(shù)。·ksize表示Sobel核的大小?!cale表示計算導數(shù)時的縮放因子,默認值是1?!elta表示在目標函數(shù)上所附加的值,默認為0?!orderType表示邊界樣式。voidcvAddWeighted(constCvArr*src1,doublealpha,constCvArr*src2,doublebeta,doublegamma);src1,第一個原數(shù)組.alpha,第一個數(shù)組元素權重src2第二個原數(shù)組beta,第二個數(shù)組元素權重gamma,圖1與圖2作和后添加的數(shù)值。不要太大,不然圖片一片白??偤偷扔?55以上就是純白色了。其他一階微分算子作用效果Sobel算子3×3模板鄰域梯度的均值

效果展示7.3.3Prewitt邊緣檢測算子邊緣檢測Prewitt算子其他一階微分算子作用效果Prewitt算子3×3模板鄰域梯度的均值與sobel相比,圖像效果比較干凈

效果展示7.3.4Scharr邊緣檢測算子Scharr算子為Sobel的改進,與Sobel相同的計算速度,但是精度更高。Scharr算子不同的是,Scharr僅作用于大小為3的內核。圖像與水平方向上的卷積:垂直方向上的邊緣強度,圖像與垂直方向上的卷積:水平方向上的邊緣強度。Python實現(xiàn)dst=cv2.Scharr(src,ddepth,dx,dy,dst=None,ksize=None,delta=None,borderType=None)ddepth表示輸出圖像的深度。dx,dy:int類型的,表示x方向的差分階數(shù),1或0kSize:模板大小,對于Sobel取值為1,3,5,7,當不輸入的時候,默認為3。特殊的,當kSize=1的時候,采用的模板為1*3或者3*1而非平時的那些格式delta表示在目標函數(shù)上所附加的值,默認為0。borderType表示邊界樣式。效果展示7.3.5Krisch自適應邊緣檢測理論基礎Kirsch邊緣檢測算子為:

圖像中的每個點都用8個掩模進行卷積,所有8個方向中的最大值作為邊緣幅度圖像輸出。最大響應掩模的序號構成了邊緣方向的編碼。

邊緣檢測Kirsch算子其他一階微分算子作用效果Kirsch算子8個方向邊緣檢測Kirsch算子函數(shù)說明(1)retval=scipy.signal.convolve2d(src,kernel,mode,boundary,fillvalue)用于實現(xiàn)二維離散卷積。retval:返回的圖像;src:輸入的二維圖像;kernel:輸入的二維數(shù)組,代表卷積核;mode:卷積類型,有“full”,“valid”以及“same”類型;boundary:邊界填充方式,有“fill”,“warp”以及“symm”方式;fillvalue:當boundary="fill"時,設置邊界填充的方式,默認為0。效果展示圖7-6Krisch

邊緣檢測處理效果圖7.3.6拉普拉斯算子理論基礎拉普拉斯算子屬于二階微分:x方向:

y方向:由以上兩個分量相加:

Sobel算子和Scharr算子都是一階導數(shù)算子;Laplacian算子是二階導數(shù)算子,具有旋轉不變性,滿足不同方向上的邊緣檢測要求。二維函數(shù)的Laplacian(拉普拉斯)變換計算公式定義:Laplacian算子圖像二階微分作用效果Laplacian算子4鄰域

在圖像邊緣處理中,二階微分的邊緣定位能力更強,銳化效果更好,因此在進行圖像邊緣處理時,直接采用二階微分算子而不使用一階微分。Laplace是一個二階導數(shù)的算子,是一個x方向二階導數(shù)和y方向二階導數(shù)的和的近似求導算子。Laplace算子為可以看出,該算子在上下左右四個90度的方向上結果相同,也就是說在90度方向上無方向性。為了讓其在45度的方向上也具有該性質,對laplace進行擴展定義即Laplace擴展算子圖像二階微分作用效果Laplacian算子加入對角像素8鄰域噪聲被增強雙邊緣理論基礎常用的拉普拉斯邊緣檢測模板:Python實現(xiàn)dst=cv2.Laplacian(src,ddepth[,ksize[,scale[,delta[,borderType]]]])·ddepth表示輸出圖像的深度?!size表示二階導數(shù)核的大小,必須是正奇數(shù)?!cale表示計算導數(shù)時的縮放因子,默認值是1?!elta表示在目標函數(shù)上所附加的值,默認為0。·borderType表示邊界樣式。一般Laplace運算之前,會先對圖像進行模糊平滑處理,目的是去除高頻噪聲importcv2ascvimage=cv.imread("F:/picture/coins.jpg",0)#讀取一幅灰度圖#使用拉普拉斯算子計算邊緣信息laplacian=cv.Laplacian(image,cv.CV_64F)laplacian=cv.convertScaleAbs(laplacian)#對計算結果取絕對值#顯示圖像cv.imshow("image",image)cv.imshow("laplacian",laplacian)a原始圖像;b是對原始圖像進行邊緣檢測的結果??梢钥闯?,拉普拉斯邊緣檢測可以檢測出更多的邊緣信息。理論基礎拉普拉斯(Laplacian)算子是不依賴于邊緣方向的二階微分算子,對階躍型邊緣點定位準確。對噪聲敏感,噪聲成分加強,抗噪聲能力差,易丟失一部分邊緣的方向信息。該算子強調突變,弱化慢變。

(a)原圖(b)拉普拉斯算子邊緣檢測圖7-7拉普拉斯邊緣檢測函數(shù)說明retval=cv2.Laplacian(src,ddepth[,ksize[,scale[,delta[,borderType]]]])retval:表示計算得到的目標函數(shù)圖像;src:表示原始圖像;ddepth:表示輸出圖像的深度;ksize:表示二階導數(shù)核的大小,必須是正奇數(shù);scale:表示計算導數(shù)時的縮放因子,默認值是1;delta:表示在目標函數(shù)上所附加的值,默認為0;borderType:表示邊界樣式。效果展示7.3.7高斯-拉普拉斯算子拉普拉斯邊緣檢測算子沒有對圖像做平滑處理,會對噪聲產生影響。首先要對圖像進行高斯平滑處理,然后再與拉普拉斯核進行卷積運算。因為要做兩次卷積,計算復雜度較大,為了降低計算時的復雜度,去噪,二維高斯函數(shù)的拉普拉斯變換:高斯拉普拉斯邊緣檢測理論基礎高斯-拉普拉斯算子先用高斯函數(shù)做平滑濾波,后用拉普拉斯算子檢測邊緣,克服了拉普拉斯算子抗噪聲能力比較差的缺點,在抑制噪聲的同時,平滑掉了比較尖銳的邊緣。二維高斯函數(shù)高斯函數(shù)拉普拉斯變換:具體步驟1.構建窗口大小為H×W、標準差為σ的LoG卷積核。

H、W均為奇數(shù)且一般H=W,卷積核錨點的位置在2.將圖像矩陣與LoGH×W核進行卷積操作,結果記為I_Cov_LoG。3.將得到的邊緣信息二值化顯示。高斯拉普拉斯邊緣檢測的效果與先進行高斯平滑然后再進行拉普拉斯邊緣檢測的效果是類似的。

#主函數(shù)image=cv.imread("F:/picture/lena.png",0)#顯示原圖cv.imshow("image",image)#LoG卷積2為sigmaimg1=LoG(image,2,(7,7),'symm')img2=LoG(image,2,(11,11),'symm')img3=LoG(image,2,(13,13),'symm')#邊緣的二值化顯示L1=edge_binary(img1)L2=edge_binary(img2)L3=edge_binary(img3)#顯示LoG邊緣檢測結果cv.imshow("L1",L1)cv.imshow("L2",L2)cv.imshow("L3",L3)importnumpyasnpimportmathimportcv2ascvfromscipyimportsignal效果分析a.原始圖像;b.7×7的LoG卷積核得到的檢測結果;c.11×11的LoG卷積核得到的檢測結果;d.13×13的LoG卷積核得到的檢測結果。可以看出,隨著卷積核的增大,圖像邊緣信息也在增加,當卷積核過大時,會檢測出圖像中的噪聲。高斯-拉普拉斯(LOG)算子作用效果高斯-拉普拉斯(LOG)算子

先用高斯函數(shù)作平滑濾波,

后用Laplacian算子檢測邊緣克服了Laplacian算子抗噪聲能力比較差的缺點理論基礎具體步驟如下。①構建模板大小為H×W、標準差為σ的LoG卷積核

H、W均為奇數(shù)且一般H=W,卷積核錨點的位置為

(a)高斯平滑(b)高斯-拉普拉斯銳化模板②將圖像矩陣與LoGH×W核進行卷積操作。③將得到的邊緣信息進行二值化,然后顯示。效果展示銳化算子小結好的檢測結果:對邊緣的錯誤檢測率要低,在檢測出真實邊緣的同時,避免檢測出虛假的邊緣。好的邊緣定位精度:標記的邊緣位置要和圖像上真正邊緣的位置盡量接近。對同一邊緣要有低的響應次數(shù):有的算子會對一個邊緣回產生多個響應。本來只有一個邊緣點,可是檢測出來會出現(xiàn)多個邊緣點。克服噪聲的影響。銳化算子小結

Roberts

SobelKirsch

LOG銳化算子小結Roberts:局部差分算子尋找邊緣,易丟失一部分邊緣,沒有平滑處理,不具備能抑制噪聲能力。對陡峭邊緣且含噪聲少的圖像效果較好。Sobel和Prewitt:先做加權平滑處理,再做微分運算,平滑部分的權值有些差異,對噪聲有抑制能力,但不能完全排除虛假邊緣。雖然這兩個算子邊緣定位效果不錯,但檢測出的邊緣容易出現(xiàn)多像素寬度。Laplacian:是不依賴于邊緣方向的二階微分算子,對階躍型邊緣點定位準確,對噪聲非常敏感,使噪聲加強,噪聲能力差,容易丟失一部分邊緣的方向信息,造成一些不連續(xù)的檢測邊緣。LOG:克服Laplacian算子抗噪聲差的缺點,但同時也平滑掉比較尖銳的邊緣,尖銳邊緣無法檢被測到7.3.8Canny邊緣檢測Canny邊緣檢測是一種十分流行的邊緣檢測算法,它使用了一種多級邊緣檢測算法,可以更好地檢測出圖像的邊緣信息。Canny邊緣檢測近似算法的步驟如下。1)高斯濾波來平滑圖像,目的是去除噪聲2)計算每個像素點的梯度強度和方向3)應用非極大值抑制技術,來消除邊誤檢(本來不是但檢測出來是)4)應用雙閾值的方法,來決定可能的(潛在的)邊界5)通過抑制孤立的弱化邊緣最終完成邊緣檢測(滯后的邊界跟蹤)Canny邊緣檢測

邊緣檢測容易受到圖像中噪聲的影響,因此第一步是使用5x5高斯濾波器消除圖像中的噪聲。

高斯濾波器是一種線性濾波器,能夠有效地抑制噪聲,平滑圖像。高斯濾波器的模板系數(shù)隨著模板中心的增大而減小。相對于均值濾波器,對圖像的模糊程度較小。1)高斯平滑2)Sobel算子計算圖像邊緣的幅度水平方向上的卷積核sobelx;垂直方向上的卷積核sobely卷積,得到dx和dy;利用平方和的開方得到邊緣強度。計算出梯度方向angle=arctan2(dy,dx)。

獲得梯度的幅度與方向后,對每一個位置進行非極大值抑制處理。方法:逐一遍歷像素點,判斷當前像素點是否是周圍像素點中具有相同梯度方向上的最大值。如果該點是極大值,則保留該點。否則將其歸零。3)非極大抑制Non-maximumsuppression4、雙閾值檢測設定一個閾值上界和閾值下界,如果大于閾值上界則認為必然是邊界(稱為強邊界),小于閾值下界則認為必然不是邊界,兩者之間的則認為是候選項(稱為弱邊界),進一步處理。A大于最大閾值,為強邊界,保留。B和C位于最大最小之間(成為弱邊界),候選,等待進一步判斷(第5步)。D小于最小閾值,不是邊界,丟棄。5、滯后邊界跟蹤

即與強邊界相連的位于最大最小閾值之間的弱邊界認為是邊界,其他的弱邊界則被抑制。B為弱邊界,但他是屬于孤立的弱邊界,舍棄。C同樣也是弱邊界,與強邊界A相連,故其也為邊界,保留。Python實現(xiàn)edg=cv2.Canny(src,threshould1,threshould2[,apertureSize[,L2gradient]])edg表示計算得到的邊緣信息。src表示輸入的8位圖像。threshould1表示第一個閾值。threshould2表示第二個閾值。apert

溫馨提示

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

評論

0/150

提交評論