數(shù)字圖像處理與Python實(shí)現(xiàn)(第2版)(附微課視頻)教案 第三章 空間濾波2_第1頁(yè)
數(shù)字圖像處理與Python實(shí)現(xiàn)(第2版)(附微課視頻)教案 第三章 空間濾波2_第2頁(yè)
數(shù)字圖像處理與Python實(shí)現(xiàn)(第2版)(附微課視頻)教案 第三章 空間濾波2_第3頁(yè)
數(shù)字圖像處理與Python實(shí)現(xiàn)(第2版)(附微課視頻)教案 第三章 空間濾波2_第4頁(yè)
數(shù)字圖像處理與Python實(shí)現(xiàn)(第2版)(附微課視頻)教案 第三章 空間濾波2_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章空間濾波空間濾波是在圖像平面本身上,逐像素地移動(dòng)空間模板,同時(shí)空間模板與其覆蓋的圖像像素按預(yù)定義的關(guān)系進(jìn)行運(yùn)算。模板也稱(chēng)為空間濾波器、核、掩?;虼翱凇?臻g濾波一般用于去除圖像噪聲或增強(qiáng)圖像細(xì)節(jié),突出感興趣信息,抑制無(wú)效信息,以改善人類(lèi)的視覺(jué)效果或使圖像更適合于特定的機(jī)器感知與分析。空間濾波主要包括平滑處理和銳化處理兩大類(lèi)。平滑處理主要用于去除圖像中一些不重要的細(xì)節(jié)并減小噪聲。銳化處理主要用于突出圖像中的細(xì)節(jié),增強(qiáng)被模糊了的細(xì)節(jié)。為了達(dá)到較為滿(mǎn)意的圖像增強(qiáng)效果,通常使用多種互補(bǔ)的空間濾波技術(shù)。本章將對(duì)空間濾波基礎(chǔ)知識(shí)、平滑處理、銳化處理、混合空間增強(qiáng)進(jìn)行討論。3.1空間濾波基礎(chǔ)空間域指的是圖像平面本身,是相對(duì)于變換域而言的??臻g域的圖像處理是圖像本身不進(jìn)行頻域變換,以圖像中的像素為基礎(chǔ)對(duì)圖像進(jìn)行處理。空間域的圖像處理在像素的鄰域進(jìn)行操作,如空間域平滑處理是通過(guò)像素的鄰域來(lái)平滑圖像,空間域銳化處理是通過(guò)像素的鄰域來(lái)銳化圖像。頻域的圖像處理首先將圖像變換到變換域,在頻域進(jìn)行處理,處理之后將其反變換至空間域。頻域處理主要包括低通濾波和高通濾波。低通濾波即可讓低頻信號(hào)正常通過(guò),而高于設(shè)定臨界值的高頻信號(hào)則被阻隔或減弱,可去除圖像的噪聲,相當(dāng)于空間域的平滑處理。高通濾波即可讓高頻信號(hào)正常通過(guò),而低于設(shè)定臨界值的低頻信號(hào)則被阻隔或減弱,可增強(qiáng)圖像的邊緣輪廓等高頻信號(hào),相當(dāng)于空間域的銳化處理。在頻域處理中,濾波是指過(guò)濾一些頻率分量,即通過(guò)一些頻率分量,同時(shí)拒絕一些頻率分量的通過(guò)。頻域?yàn)V波器主要包括低通濾波器和高通濾波器。濾波一詞也可用于空間域,稱(chēng)為空間域?yàn)V波,即在空間域上直接對(duì)圖像進(jìn)行處理,實(shí)現(xiàn)類(lèi)似于頻率域的平滑或銳化效果。3.1.1空間濾波機(jī)理空間濾波的機(jī)理就是在待處理圖像上逐像素點(diǎn)地移動(dòng)模板,在每一像素點(diǎn),濾波器的響應(yīng)通過(guò)事先定義的關(guān)系來(lái)計(jì)算。若濾波器在圖像像素上執(zhí)行的是線(xiàn)性操作,則成為線(xiàn)性濾波器,否則稱(chēng)為非線(xiàn)性濾波器。均值濾波器求解的是模板內(nèi)像素灰度值的平均值,其是典型的線(xiàn)性濾波器。統(tǒng)計(jì)排序?yàn)V波器是通過(guò)比較一定鄰域內(nèi)的灰度值大小來(lái)實(shí)現(xiàn)的,原始數(shù)據(jù)與濾波結(jié)果是一種邏輯關(guān)系,如最大值濾波器、最小值濾波器、中值濾波器等,都是典型的非線(xiàn)性濾波器。圖3-1說(shuō)明了33模板的線(xiàn)性空間濾波器的機(jī)理,在圖像中的任一像素點(diǎn)(x,y),其灰度值為S(x,y),空間濾波器的響應(yīng)T(x,y)是模板系數(shù)與其覆蓋的像素灰度值的乘積之和:其中W表示33模板,S表示灰度圖像,T表示線(xiàn)性空間濾波結(jié)果。顯然,求解T(x,y)時(shí),模板中心W(0,0)覆蓋著像素點(diǎn)(x,y)。圖3-133模板的線(xiàn)性空間濾波器的機(jī)理現(xiàn)將33模板的線(xiàn)性空間濾波器推廣到一般情況。對(duì)于一個(gè)大小為mn模板,由于主要關(guān)注奇數(shù)尺寸的模板,可假設(shè)m=2a+1且n=2b+1,其中a和b均為正整數(shù)。使用mn大小的模板W對(duì)MN大小的圖像S進(jìn)行線(xiàn)性空間濾波,得到濾波結(jié)果T圖像,可由下式表示:其中(x,y)表示圖像中的任一像素點(diǎn)。讀者應(yīng)注意,上述公式是將模板與圖像做相關(guān)運(yùn)算,而非卷積運(yùn)算。本章的濾波器模板均是與圖像進(jìn)行相關(guān)運(yùn)算,而非卷積運(yùn)算。實(shí)現(xiàn)空間濾波鄰域處理時(shí)的一個(gè)需要考慮的問(wèn)題是濾波中心靠近圖像邊界時(shí)發(fā)生的情況??紤]一個(gè)大小為mn的模板,當(dāng)模板中心距離圖像左邊界或右邊界為(n-1)/2個(gè)像素時(shí),該模板有一條邊與圖像左邊界或右相重合;當(dāng)模板中心距離圖像上邊界或下邊界為(m-1)/2個(gè)像素時(shí),該模板有一條邊與圖像上邊界或下邊界相重合。此時(shí),如果模板的中心繼續(xù)向圖像邊界靠近,模板的行或列就會(huì)處于圖像平面之外。有多種方法可以解決上述問(wèn)題。最簡(jiǎn)單的方法之一是將模板中心點(diǎn)的移動(dòng)范圍限制在距離圖像左邊界或右邊界不小于(n-1)/2個(gè)像素,且距離圖像上邊界或下邊界不小于(m-1)/2個(gè)像素。這種解決方法將使處理后的圖像比原始圖像稍小,可以將未被處理的像素點(diǎn)的灰度值直接復(fù)制到濾波結(jié)果處,以保持濾波結(jié)果與原圖像尺寸一致。另一種解決方法就是在圖像的左邊界和右邊界以外各補(bǔ)上(n-1)/2列灰度為零的像素點(diǎn)(其灰度也可以為其他常量值,也可以是邊界像素的灰度值),在圖像的上邊界和下邊界以外各補(bǔ)上(m-1)/2行灰度為零的像素點(diǎn),然后再進(jìn)行濾波處理,處理后的圖像與原始圖像尺寸一致?,F(xiàn)使用如圖3-2所示的33模板進(jìn)行線(xiàn)性空間濾波時(shí),考慮邊界通過(guò)0灰度值來(lái)填充擴(kuò)展,此時(shí)圖像的上邊界和下邊界之外各補(bǔ)一行灰度值為0的像素點(diǎn),左邊界和右邊界之外各補(bǔ)一列灰度值為0的像素點(diǎn),之后再對(duì)擴(kuò)展后的圖像進(jìn)行濾波處理。為了更加清晰地向讀者展示濾波過(guò)程,這里沒(méi)有使用真實(shí)圖像進(jìn)行線(xiàn)性空間濾波,而是對(duì)一個(gè)66的矩陣進(jìn)行線(xiàn)性空間濾波處理,其python代碼如下所示,該矩陣的線(xiàn)性濾波過(guò)程如圖3-2所示。如圖3-2所示,濾波后圖像的像素灰度值由模板系數(shù)與其覆蓋的像素灰度值的乘積之和求得,如濾波結(jié)果的第一個(gè)像素的灰度值2=10+00+00+00+01+02+00+00+21(相關(guān)運(yùn)算)。importnumpyasnpdefcorrel2d(img,window):m=window.shape[0]n=window.shape[1]#邊界通過(guò)0灰度值來(lái)填充擴(kuò)展img1=np.zeros((img.shape[0]+m-1,img.shape[1]+n-1))img1[(m-1)//2:(img.shape[0]+(m-1)//2),(n-1)//2:(img.shape[1]+(n-1)//2)]=imgimg2=np.zeros(img.shape)foriinrange(img2.shape[0]):forjinrange(img2.shape[1]):temp=img1[i:i+m,j:j+n]img2[i,j]=np.sum(np.multiply(temp,window))return(img1,img2)#window表示模板,img表示原始圖像window=np.array([[1,0,0],[0,0,0],[0,0,2]])img=np.array([[1,2,1,0,2,3],[0,1,1,2,0,1],[3,0,2,1,2,2],[0,1,1,0,0,1],[1,1,3,2,2,0],[0,0,1,0,1,0]])#img1表示邊界填充后的圖像,img2表示空間濾波結(jié)果img1,img2=correl2d(img,window)圖3-233模板的線(xiàn)性濾波過(guò)程3.1.2空間濾波器模板若給空間濾波器模板的系數(shù)從1開(kāi)始進(jìn)行索引,從左到右索引值遞增,先索引第一行的每個(gè)模板系數(shù),再依次索引下一行的每個(gè)模板系數(shù),如圖3-3所示。若用W向量表示濾波模板,Z向量表示模板所覆蓋的像素的灰度值,則模板響應(yīng)可用下式表示:其中W=[w1,w2,……,wmn]T是大小為mn的濾波器模板,Z=[z1,z2,……,zmn]T是濾波器模板所覆蓋的圖像像素的灰度值向量。圖3-3是一個(gè)33模板,該模板響應(yīng)為:其中W是包含9個(gè)模板系數(shù)的列向量,Z是包含9個(gè)像素灰度值的列向量。圖3-333濾波模板的另一種表示mn的線(xiàn)性濾波器模板有mn個(gè)系數(shù),這mn個(gè)系數(shù)的值決定了線(xiàn)性空間濾波器的功能。假設(shè)要實(shí)現(xiàn)33的平滑空間濾波器,最簡(jiǎn)單的方法之一是使得濾波器的系數(shù)均為1/9。在3.2節(jié)中,我們?cè)僮屑?xì)討論平滑空間濾波器,介紹多種平滑空間濾波模板。銳化空間濾波模板也將在3.3節(jié)進(jìn)行詳細(xì)討論。3.2平滑處理平滑空間濾波器常用于模糊處理和降低噪聲。平滑濾波器使用模板確定的鄰域內(nèi)像素的平均灰度值或模板內(nèi)的邏輯運(yùn)算值代替原圖像中像素的灰度值,這種處理降低了圖像灰度的“尖銳”變化。然而,圖像邊緣也是由圖像灰度尖銳變化帶來(lái)的特性,因此平滑空間濾波器有邊緣模糊化的負(fù)面效應(yīng)。平滑空間濾波器可分為平滑線(xiàn)性空間濾波器和平滑非線(xiàn)性空間濾波器。具有代表性的平滑非線(xiàn)性空間濾波器為統(tǒng)計(jì)排序?yàn)V波器。3.2.1平滑線(xiàn)性空間濾波器平滑線(xiàn)性空間濾波器的輸出是包含在濾波器模板鄰域內(nèi)的像素的簡(jiǎn)單平均值或加權(quán)平均值。平滑線(xiàn)性空間濾波器有時(shí)也稱(chēng)為均值濾波器。均值濾波器的一個(gè)重要應(yīng)用是降低圖像中的噪聲。均值濾波器還有一個(gè)重要應(yīng)用,去除圖像的不相關(guān)細(xì)節(jié),更加突出感興趣目標(biāo),使得那些不相關(guān)細(xì)節(jié)與背景揉合在一起,從而使感興趣目標(biāo)更加易于檢測(cè),此時(shí)模板的大小與不相關(guān)細(xì)節(jié)的尺寸有關(guān)。圖3-4顯示了兩個(gè)平滑空間濾波器模板,第一個(gè)模板是33模板,第二個(gè)模板是55模板。濾波器響應(yīng)如下式所示:R是由mn模板定義的均值濾波器的響應(yīng),該模板中的所有系數(shù)均為1/mn,這種濾波器也成為盒狀濾波器,是最簡(jiǎn)單的均值濾波器。圖3-4盒狀濾波器模板盒狀濾波器模板較簡(jiǎn)單,常用的均值濾波器是加權(quán)平均的,也就是在鄰域中某些像素的權(quán)重較大。如圖3-5所示的均值濾波器模板,模板中心位置的系數(shù)最大,模板其他位置的系數(shù)與距模板中心的距離成反比。用戶(hù)可根據(jù)實(shí)際目標(biāo)調(diào)整加權(quán)平均濾波器的權(quán)重,加權(quán)平均濾波器模板比盒狀濾波器模板更為符合實(shí)際需求。圖3-5加權(quán)平均濾波器模板加權(quán)平均更合理,距離越近的點(diǎn)權(quán)重越大,距離越遠(yuǎn)的點(diǎn)權(quán)重越小。高斯分布顯然是一種可取的權(quán)重分配模式。高斯分布是一種鐘形曲線(xiàn),越接近中心,取值越大,越遠(yuǎn)離中心,取值越小。高斯濾波器是一類(lèi)根據(jù)高斯函數(shù)的形狀來(lái)選擇權(quán)值的線(xiàn)性平滑濾波器。高斯平滑濾波器對(duì)于抑制服從正態(tài)分布的噪聲非常有效。二維高斯函數(shù)如下式所示:其中,是標(biāo)準(zhǔn)差。根據(jù)以上二維高斯函數(shù)可以生成高斯平滑濾波器模板。假設(shè)現(xiàn)要生成高斯濾波器模板,且要求模板系數(shù)之和為1,則濾波器系數(shù)如下式所示:模板大小為mn,為了方便索引使得m=2a+1且n=2b+1,其中a和b均為正整數(shù)。模板中心為W(0,0),模板中心的系數(shù)值最大。假設(shè)現(xiàn)要生成55的高斯平滑空間濾波模板,則需要計(jì)算W(-2,-2)、W(-2,-1)、……、W(0,0)、……、W(2,1)、W(2,2)的值。圖3-6為標(biāo)準(zhǔn)差為1.0時(shí)的55的高斯平滑濾波器模板。圖3-655的高斯平滑濾波器模板現(xiàn)我們分別使用33、55、99盒狀濾波器對(duì)圖像進(jìn)行平滑空間濾波,python代碼如下所示,濾波結(jié)果如圖3-7所示。importnumpyasnpfromscipyimportsignalfromskimageimportdatafrommatplotlibimportpyplotasplt#定義二維灰度圖像的空間濾波函數(shù)defcorrel2d(img,window):#使用濾波器實(shí)現(xiàn)圖像的空間相關(guān)#mode=‘same’表示輸出尺寸等于輸入尺寸#boundary='fill'表示濾波前,用常量值填充原圖像的邊緣,默認(rèn)常量值為0s=signal.correlate2d(img,window,mode='same',boundary='fill')returns.astype(np.uint8)#img為原始圖像img=data.camera()#3*3盒狀濾波模板window1=np.ones((3,3))/(3**2)#5*5盒狀濾波模板window2=np.ones((5,5))/(5**2)#9*9盒狀濾波模板window3=np.ones((9,9))/(9**2)#生成濾波結(jié)果new_img1=correl2d(img,window1)new_img2=correl2d(img,window2)new_img3=correl2d(img,window3)#顯示圖像plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.subplot(2,2,1)plt.axis('off')plt.imshow(img,cmap='gray')plt.title('原圖像')plt.subplot(2,2,2)plt.axis('off')plt.imshow(new_img1,cmap='gray')plt.title('3*3')plt.subplot(2,2,3)plt.axis('off')plt.imshow(new_img2,cmap='gray')plt.title('5*5')plt.subplot(2,2,4)plt.axis('off')plt.imshow(new_img3,cmap='gray')plt.title('9*9')plt.savefig('盒狀濾波結(jié)果.tif')圖3-7盒狀濾波結(jié)果觀(guān)察圖3-7,可以發(fā)現(xiàn)33盒狀濾波結(jié)果比原圖像的湖面水波更加平滑。與原圖像相比,使用55盒狀濾波模板所得的圖像的湖面水波更加平滑,并且遠(yuǎn)處的風(fēng)景更加模糊,同時(shí)圖像中攝影師也被模糊了。與原圖像和其他濾波結(jié)果相比,99盒狀濾波結(jié)果更為模糊。使用盒狀濾波器對(duì)該圖像進(jìn)行濾波,隨著濾波模板的增大,遠(yuǎn)處風(fēng)景模糊化的同時(shí)也將圖像中的攝影師模糊化了。現(xiàn)我們分別使用33、55、99的高斯平滑濾波器對(duì)圖像進(jìn)行平滑空間濾波,python代碼如下所示,濾波結(jié)果如圖3-8所示。importnumpyasnpfromscipyimportsignalfromskimageimportdatafrommatplotlibimportpyplotaspltimportmath#定義二維灰度圖像的空間濾波函數(shù)defcorrel2d(img,window):#使用濾波器實(shí)現(xiàn)圖像的空間相關(guān)#mode=‘same’表示輸出尺寸等于輸入尺寸#boundary='fill'表示濾波前,用常量值填充原圖像的邊緣,默認(rèn)常量值為0s=signal.correlate2d(img,window,mode='same',boundary='fill')returns.astype(np.uint8)#定義二維高斯函數(shù)defgauss(i,j,sigma):return1/(2*math.pi*sigma**2)*math.exp(-(i**2+j**2)/(2*sigma**2))#定義radius*radius的高斯平滑模板defgauss_window(radius,sigma):window=np.zeros((radius*2+1,radius*2+1))foriinrange(-radius,radius+1):forjinrange(-radius,radius+1):window[i+radius][j+radius]=gauss(i,j,sigma)returnwindow/np.sum(window)#img為原始圖像img=data.camera()#3*3高斯平滑濾波模板window1=gauss_window(3,1.0)#5*5高斯平滑濾波模板window2=gauss_window(5,1.0)#7*7高斯平滑濾波模板window3=gauss_window(9,1.0)#生成濾波結(jié)果new_img1=correl2d(img,window1)new_img2=correl2d(img,window2)new_img3=correl2d(img,window3)#顯示圖像plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.subplot(2,2,1)plt.axis('off')plt.imshow(img,cmap='gray')plt.title('原圖像')plt.subplot(2,2,2)plt.axis('off')plt.imshow(new_img1,cmap='gray')plt.title('3*3')plt.subplot(2,2,3)plt.axis('off')plt.imshow(new_img2,cmap='gray')plt.title('5*5')plt.subplot(2,2,4)plt.axis('off')plt.imshow(new_img3,cmap='gray')plt.title('9*9')plt.savefig('高斯平滑濾波結(jié)果.tif')圖3-8高斯平滑濾波結(jié)果觀(guān)察圖3-8,可以發(fā)現(xiàn)隨著高斯濾波模板的增大,濾波結(jié)果越來(lái)越平滑。對(duì)比圖3-7和圖3-8,可以發(fā)現(xiàn)使用相同尺寸的模板,高斯濾波后圖像被平滑的程度較低。高斯濾波的輸出是鄰域像素的加權(quán)平均,同時(shí)離中心越近的像素權(quán)重越高。因此,與盒狀濾波相比,高斯濾波的平滑效果更柔和,圖像中感興趣目標(biāo)的細(xì)節(jié)保留的也更好。高斯濾波效果與標(biāo)準(zhǔn)差和模板尺寸有關(guān),讀者可調(diào)節(jié)標(biāo)準(zhǔn)差和模板尺寸,觀(guān)察高斯平滑濾波的效果。3.2.2統(tǒng)計(jì)排序?yàn)V波器統(tǒng)計(jì)排序?yàn)V波器是典型的非線(xiàn)性平滑濾波器,首先對(duì)模板所覆蓋的像素的灰度值進(jìn)行排序,選擇有代表性的灰度值作為統(tǒng)計(jì)排序?yàn)V波器的響應(yīng)。典型的統(tǒng)計(jì)排序?yàn)V波器包括最大值濾波器,中值濾波器和最小值濾波器。中值濾波器是用像素鄰域內(nèi)的中間值代替該像素的灰度值,主要用于降噪。最大值濾波器是用像素鄰域內(nèi)的最大值代替該像素的灰度值,主要用于尋找最亮點(diǎn)。最小值濾波器是用像素鄰域內(nèi)的最小值代替該像素的灰度值,主要用于尋找最暗點(diǎn)。在統(tǒng)計(jì)排序?yàn)V波器中,中值濾波器的應(yīng)用最廣。對(duì)于一定類(lèi)型的隨機(jī)噪聲,中值濾波器的降噪效果較好,同時(shí)比相同尺寸的均值濾波器模糊程度明顯要低。中值濾波器對(duì)處理脈沖噪聲(也稱(chēng)椒鹽噪聲)非常有效,因?yàn)橹兄禐V波器取中值作為濾波結(jié)果,可以很好地去除濾波器所覆蓋的鄰域中的一些黑點(diǎn)或者白點(diǎn)。中值濾波器首先對(duì)模板所覆蓋的像素鄰域內(nèi)的所有灰度值進(jìn)行排序,找到鄰域的中值,用這個(gè)中間值作為中值濾波器的響應(yīng)。假設(shè)33中值濾波模板下方的像素灰度值為(2,3,0,10,9,1,7,5,3),排序結(jié)果為(0,1,2,3,3,5,7,9,10),中值為3,則該鄰域的中值濾波結(jié)果為3。中值濾波器使得圖像中突出的亮點(diǎn)(暗點(diǎn))更像它周?chē)闹担韵铝⒌牧咙c(diǎn)(暗點(diǎn)),從而實(shí)現(xiàn)對(duì)圖像的平滑?,F(xiàn)我們對(duì)宇航員的灰度圖像加入椒鹽噪聲,然后使用33的中值濾波器對(duì)圖像進(jìn)行平滑空間濾波,以觀(guān)察中值濾波器的降噪效果,python代碼如下所示,濾波結(jié)果如圖3-9所示。fromscipyimportndimagefromskimageimportdata,utilfrommatplotlibimportpyplotasplt#img為原始圖像img=data.astronaut()[:,:,0]#對(duì)圖像加入椒鹽噪聲noise_img=util.random_noise(img,mode='s&p',seed=None,clip=True)#中值濾波n=3new_img=ndimage.median_filter(noise_img,(n,n))#顯示圖像plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.subplot(1,3,1)plt.axis('off')plt.imshow(img,cmap='gray')plt.title('原圖像')plt.subplot(1,3,2)plt.axis('off')plt.imshow(noise_img,cmap='gray')plt.title('加噪圖像')plt.subplot(1,3,3)plt.axis('off')plt.imshow(new_img,cmap='gray')plt.title('中值濾波')plt.savefig('中值濾波結(jié)果.tif')圖3-9中值濾波結(jié)果觀(guān)察圖3-9,可以發(fā)現(xiàn)中值濾波后的圖像與原圖像非常接近,中值濾波可以很好地去除隨機(jī)椒鹽噪聲。以上空間濾波的例子都是在灰度圖像上進(jìn)行的,其實(shí)也可以對(duì)彩色圖像進(jìn)行空間濾波。對(duì)RGB彩色圖像的空間濾波相當(dāng)于分別對(duì)R、G、B三通道的圖像進(jìn)行空間濾波?,F(xiàn)我們對(duì)宇航員的彩色圖像加入椒鹽噪聲,然后使用33的中值濾波器對(duì)彩色圖像進(jìn)行平滑空間濾波,python代碼如下所示,彩色圖像中值濾波結(jié)果如圖3-10所示。讀者可以結(jié)合以下彩色圖像中值濾波的代碼,自行編寫(xiě)彩色圖像線(xiàn)性平滑空間濾波的代碼。importnumpyasnpfromscipyimportndimagefromskimageimportdata,utilfrommatplotlibimportpyplotasplt#img為原圖像img=data.astronaut()noise_img=np.zeros(img.shape)new_img=np.zeros(img.shape)foriinrange(3):grayimg=data.astronaut()[:,:,i]#對(duì)圖像加入椒鹽噪聲noise_img[:,:,i]=util.random_noise(grayimg,mode='s&p',seed=None,clip=True)#中值濾波n=3new_img[:,:,i]=ndimage.median_filter(noise_img[:,:,i],(n,n))圖3-10彩色圖像中值濾波結(jié)果最大值濾波器是將鄰域內(nèi)的像素灰度值進(jìn)行從小到大的排序,用序列的最后一個(gè)值即最大值代替該像素的灰度值,對(duì)于發(fā)現(xiàn)圖像最亮點(diǎn)非常有效,可有效降低胡椒噪聲。最小值濾波器用序列的最小值代替該像素的灰度值,對(duì)于發(fā)現(xiàn)圖像最暗點(diǎn)非常有效,可有效降低鹽粒噪聲。現(xiàn)我們?yōu)閳D像加入噪聲,然后分別使用33的最大值濾波器和最小值濾波器對(duì)圖像進(jìn)行空間濾波,python代碼如下所示,濾波結(jié)果如圖3-11所示。fromscipyimportndimagefromskimageimportdata,utilfrommatplotlibimportpyplotasplt#img為原始圖像img=data.astronaut()[:,:,0]#對(duì)圖像加入胡椒噪聲pepper_img=util.random_noise(img,mode='pepper',seed=None,clip=True)#對(duì)圖像加入鹽粒噪聲salt_img=util.random_noise(img,mode='salt',seed=None,clip=True)n=3#高斯濾波gauss_img=ndimage.gaussian_filter(pepper_img,1)#最大值濾波max_img=ndimage.maximum_filter(pepper_img,(n,n))#最小值濾波min_img=ndimage.minimum_filter(salt_img,(n,n))#顯示圖像plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.subplot(2,3,1)plt.axis('off')plt.imshow(img,cmap='gray')plt.title('原圖像')plt.subplot(2,3,2)plt.axis('off')plt.imshow(pepper_img,cmap='gray')plt.title('加胡椒噪聲圖像')plt.subplot(2,3,3)plt.axis('off')plt.imshow(salt_img,cmap='gray')plt.title('加鹽粒噪聲圖像')plt.subplot(2,3,4)plt.axis('off')plt.imshow(gauss_img,cmap='gray')plt.title('高斯濾波')plt.subplot(2,3,5)plt.axis('off')plt.imshow(max_img,cmap='gray')plt.title('最大值濾波')plt.subplot(2,3,6)plt.axis('off')plt.imshow(min_img,cmap='gray')plt.title('最小值濾波')plt.savefig('最大值和最小值濾波結(jié)果.tif')圖3-11彩色圖像統(tǒng)計(jì)排序?yàn)V波結(jié)果從圖3-11可以發(fā)現(xiàn)最大值濾波結(jié)果比原圖像更亮,最小值濾波結(jié)果比原圖像暗。最大值濾波對(duì)于去除胡椒噪聲非常有效,最小值濾波對(duì)于去除鹽粒噪聲非常有效。高斯濾波可以平滑圖像,可以稍微平滑胡椒噪聲,但對(duì)胡椒噪聲處理效果較差。讀者可在原圖像加入高斯噪聲,然后用高斯濾波器進(jìn)行濾波,觀(guān)察降噪效果。上述平滑空間濾波器適用環(huán)境不同,處理效果也不同,具體選用或設(shè)計(jì)哪種平滑濾波器需與實(shí)際問(wèn)題相結(jié)合。3.3銳化處理圖像銳化的目的是增強(qiáng)圖像中目標(biāo)的細(xì)節(jié)、邊緣、輪廓和其他灰度突變,削弱了灰度變化緩慢的區(qū)域。由于微分是對(duì)函數(shù)的局部變化率的一種描述,因此圖像銳化算法的實(shí)現(xiàn)可基于空間微分。圖像平滑處理有邊緣和細(xì)節(jié)模糊的負(fù)面效應(yīng),圖像平滑和圖像銳化在邏輯上是相反的操作,因此也可以用原圖像減去平滑處理后的圖像來(lái)實(shí)現(xiàn)銳化處理,稱(chēng)為反銳化掩蔽。本節(jié)將主要討論一階微分算子、二階微分算子和反銳化掩蔽。3.3.1一階微分算子對(duì)于任意一階微分的定義都必須滿(mǎn)足以下兩點(diǎn):在灰度不變的區(qū)域微分值為0;在灰度變化的區(qū)域微分值非0。由于我們處理的是離散情況,微分用差分來(lái)近似。對(duì)于一維函數(shù),其一階微分的基本定義是:一維微分可以用導(dǎo)數(shù)符號(hào),這里使用偏導(dǎo)數(shù)符號(hào)是為了方便擴(kuò)展至二維微分。二維圖像,將沿著兩個(gè)空間坐標(biāo)軸求解一階微分,即分別求解對(duì)x和y的偏導(dǎo)數(shù):二維圖像的梯度是一個(gè)二維列向量,可表示為:梯度的幅值可表示為:是梯度向量方向變化率在處的值。梯度向量的兩個(gè)分量都是一階偏導(dǎo)數(shù),說(shuō)明兩個(gè)分量都是線(xiàn)性算子。梯度向量的幅值進(jìn)行了求平方和求平方根操作,是非線(xiàn)性算子。為了方便描述,將像素點(diǎn)的33鄰域的灰度值表示z1,z2,……z9,其中z5表示的灰度值,z1表示,z6表示,z8表示,z9表示,如圖3-12所示。則二維圖像的最簡(jiǎn)單的一階微分近似是:和。根據(jù)Roberts的觀(guān)點(diǎn),邊緣探測(cè)器應(yīng)具有以下特性:產(chǎn)生的邊緣應(yīng)清晰,背景應(yīng)盡可能減少噪音,邊緣強(qiáng)度應(yīng)盡可能接近人類(lèi)的感知。考慮到圖像邊界的拓?fù)浣Y(jié)構(gòu)性,Roberts提出兩個(gè)交叉差分來(lái)表示和:Roberts所提出兩個(gè)交叉差分也稱(chēng)為羅伯特交叉梯度算子,如圖3-13所示。梯度幅度為:代表每個(gè)像素點(diǎn)的梯度幅值,則表示一幅梯度圖像。圖3-12圖像的33鄰域圖3-13羅伯特交叉梯度算子將如圖3-13所示的羅伯特交叉梯度算子作用于圖像,可得到兩幅羅伯特交叉邊緣圖像robert_pos和robert_neg,如圖3-14所示。該圖像的羅伯特交叉梯度圖像可由robert_pos和robert_neg的平方和的平方根求得,如圖3-14的robert圖像所示。求羅伯特邊緣圖像和梯度圖像的python代碼如下所示。該代碼調(diào)用了skimage.filters中的roberts等函數(shù),讀者可查看這些庫(kù)函數(shù)的定義,也可參照3.1和3.2節(jié)中的代碼自己編寫(xiě)roberts函數(shù)。fromskimageimportdata,filtersfrommatplotlibimportpyplotasplt#img為原始圖像img=data.camera()#羅伯特交叉梯度算子img_robert_pos=filters.roberts_pos_diag(img)img_robert_neg=filters.roberts_neg_diag(img)img_robert=filters.roberts(img)#顯示圖像plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.subplot(2,2,1)plt.axis('off')plt.imshow(img,cmap='gray')plt.title('原圖像')plt.subplot(2,2,2)plt.axis('off')plt.imshow(img_robert_pos,cmap='gray')plt.title('robert_pos')plt.subplot(2,2,3)plt.axis('off')plt.imshow(img_robert_neg,cmap='gray')plt.title('robert_neg')plt.subplot(2,2,4)plt.axis('off')plt.imshow(img_robert,cmap='gray')plt.title('robert')plt.savefig('roberts.tif')圖3-14羅伯特交叉邊緣圖像和梯度圖像使用羅伯特交叉算子圖像可得到梯度圖像,那如何對(duì)圖像進(jìn)行銳化,以增強(qiáng)圖像的邊緣呢?可以將梯度圖像以一定比例疊加到原圖像,即可得到銳化圖像,如下式所示:其中為銳化強(qiáng)度系數(shù)。我們一般更為注重奇數(shù)模板,因?yàn)槠鏀?shù)模板有對(duì)稱(chēng)中心,容易實(shí)現(xiàn)。羅伯特交叉算子是22偶數(shù)模板,而我們更為關(guān)注33奇數(shù)模板。使用如圖3-12所示的33鄰域表示方法,可以對(duì)和進(jìn)行近似表達(dá),如下式所示:以上公式可用如圖3-15所示的水平sobel算子(3-15的左圖)和豎直sobel算子實(shí)現(xiàn)。圖3-15水平sobel算子和豎直sobel算子將如圖3-15所示的sobel算子作用于圖像,可得到兩幅sobel邊緣圖像sobel_h(水平邊緣較明顯)和sobel_v(豎直邊緣較明顯),如圖3-16所示。該圖像的sobel梯度圖像可由sobel_h和sobel_v的平方和的平方根求得,如圖3-16的sobel圖像所示。求sobel邊緣圖像和梯度圖像的python代碼如下所示。fromskimageimportdata,filtersfrommatplotlibimportpyplotasplt#img為原始圖像img=data.camera()#sobel算子img_sobel_h=filters.sobel_h(img)img_sobel_v=filters.sobel_v(img)img_sobel=filters.sobel(img)#顯示圖像plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.subplot(2,2,1)plt.axis('off')plt.imshow(img,cmap='gray')plt.title('原圖像')plt.subplot(2,2,2)plt.axis('off')plt.imshow(img_sobel_h,cmap='gray')plt.title('sobel_h')plt.subplot(2,2,3)plt.axis('off')plt.imshow(img_sobel_v,cmap='gray')plt.title('sobel_v')plt.subplot(2,2,4)plt.axis('off')plt.imshow(img_sobel,cmap='gray')plt.title('sobel')圖3-16sobel邊緣圖像和梯度圖像3.3.2二階微分算子對(duì)于任意二階微分的定義都必須滿(mǎn)足以下兩點(diǎn):在灰度不變的區(qū)域微分值為0;在灰度臺(tái)階或斜坡的起點(diǎn)處微分值非0;沿著斜坡的微分值為0。由于我們處理的是離散情況,微分用差分來(lái)近似。對(duì)于一維函數(shù),其二階微分的基本定義是:對(duì)于二維圖像,將沿著兩個(gè)空間坐標(biāo)軸求解二階微分:則拉普拉斯算子為:這個(gè)拉普拉斯算子可用圖3-17的第一個(gè)模板來(lái)實(shí)現(xiàn)。上述拉普拉斯變換未考慮對(duì)角線(xiàn)元素,可以對(duì)其添加對(duì)角線(xiàn)元素項(xiàng),并且更改中心項(xiàng)的系數(shù),以保證模板系數(shù)和為0,從而保證灰度恒定區(qū)域的微分值為0。擴(kuò)展的拉普拉斯算子如下式所示:擴(kuò)展的拉普拉斯算子如圖3-17的第二個(gè)模板所示。以上兩個(gè)模板的中心系數(shù)均為負(fù)數(shù),在實(shí)踐中并不經(jīng)常使用,實(shí)踐中常使用的兩個(gè)模板是圖3-17的前兩個(gè)模板乘以系數(shù)-1所得,如圖3-17所示。圖3-17拉普拉斯模板對(duì)原圖像使用拉普拉斯模板進(jìn)行空間濾波可得到拉普拉斯圖像,將拉普拉斯圖像以一定比例疊加到原圖像(該比例的符號(hào)與模板中心系數(shù)的符號(hào)一致),可對(duì)原圖像進(jìn)行拉普拉斯銳化增強(qiáng)。拉普拉斯銳化增強(qiáng)的python代碼如下所示,拉普拉斯銳化結(jié)果見(jiàn)圖3-18。對(duì)比圖3-16和3-18,可發(fā)現(xiàn)一階微分更加突出圖像的邊緣,二階微分則對(duì)灰度變化強(qiáng)烈的地方更為敏感,更加突出圖像的紋理結(jié)構(gòu)。fromskimageimportdata,filtersfrommatplotlibimportpyplotasplt#img為原始圖像img=data.camera()#laplaceimg_laplace=filters.laplace(img,ksize=3,mask=None)img_enhance=img+img_laplace#顯示圖像plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.subplot(1,3,1)plt.axis('off')plt.imshow(img,cmap='gray')plt.title('原圖像')plt.subplot(1,3,2)plt.axis('off')plt.imshow(img_laplace,cmap='gray')plt.title('laplace')plt.subplot(1,3,3)plt.axis('off')plt.imshow(img_enhance,cmap='gray')plt.title('銳化增強(qiáng)')plt.savefig('laplace.tif')圖3-18拉普拉斯銳化增強(qiáng)3.3.3反銳化掩蔽圖像平滑處理有邊緣和細(xì)節(jié)模糊的負(fù)面效應(yīng),因此可用原圖像減去平滑處理后的圖像來(lái)實(shí)現(xiàn)銳化處理,稱(chēng)為反銳化掩蔽。反銳化掩蔽處理包括三個(gè)步驟:首先通過(guò)平滑濾波得到模糊圖像,然后從原圖像中減去模糊圖像得到差值圖像,最后將差值圖像疊加到原圖像中。原圖像平滑處理所得的模糊圖像為,用原圖像減去模糊圖像得到差值圖像,如下式所示:最后,將差值圖像以一定比例疊加到原圖像,如下式所示:其中,權(quán)重系數(shù)為。當(dāng)時(shí)稱(chēng)為反銳化掩蔽,當(dāng)時(shí)稱(chēng)為高提升濾波,當(dāng)時(shí)不強(qiáng)調(diào)非銳化掩蔽效果。反銳化掩蔽的python代碼如下所示,反銳化掩蔽結(jié)果如圖3-19所示。importnumpyasnpfromscipyimportsignalfromskimageimportdatafrommatplotlibimportpyplotaspltdefcorrel2d(img,window):s=signal.correlate2d(img,window,mode='same',boundary='fill')returns#img為原始圖像img=data.camera()#3*3盒狀濾波模板window=np.ones((3,3))/(3**2)img_blur=correl2d(img,window)img_edge=img-img_blurimg_enhance=img+img_edgeplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.subplot(2,2,1)plt.axis('off')plt.imshow(img,cmap='gray')plt.title('原圖像')plt.subplot(2,2,2)plt.axis('off')plt.imshow(img_blur,cmap='gray')plt.title('模糊圖像')plt.subplot(2,2,3)plt.axis('off') plt.imshow(img_edge,cmap='gray')plt.title('差值圖像')plt.subplot(2,2,4)plt.axis('off')plt.imshow(img_enhance,cmap='gray')plt.title('銳化增強(qiáng)')圖3-19反銳化掩蔽3.4混合空間增強(qiáng)所謂混合空間增強(qiáng),就是綜合利用平滑、銳化濾波器、灰度拉伸等,對(duì)圖像進(jìn)行處理,得到更為理想的顯示效果,本節(jié)將采用一個(gè)經(jīng)典的案例來(lái)對(duì)混合空間增強(qiáng)進(jìn)行說(shuō)明。由于人體全身骨骼核掃描圖像灰度的動(dòng)態(tài)范圍很窄并且有很高的噪聲內(nèi)容,使用單一的濾波器對(duì)其進(jìn)行增強(qiáng)效果一般。在本案例中,首先使用拉普拉斯銳化方法突出圖像中的小細(xì)節(jié),然后使用sobel梯度處理方法法突出圖像的邊緣,并使用平滑的梯度圖像用于掩蔽拉普拉斯銳化增強(qiáng)圖像,最后使用灰度冪律變換來(lái)增強(qiáng)圖像的灰度動(dòng)態(tài)范圍,該案例的流程圖見(jiàn)圖3-20。該案例所使用的原始圖像為人體全身骨骼核掃描圖像,見(jiàn)圖3-21(a)。圖3-20人體全身骨骼掃描圖像的混合空間增強(qiáng)案例如圖3-20所示,第一步先對(duì)原圖像進(jìn)行拉普拉斯銳化,得到拉普拉斯銳化圖像;第二步將原圖像與拉普拉斯銳化圖像相加可得拉普拉斯銳化增強(qiáng)圖像;第三步對(duì)原圖像進(jìn)行sobel算子梯度處理得到sobel圖像;第四步使用55均值濾波器對(duì)sobel圖像進(jìn)行平滑得到平滑的sobel圖像;第五步將拉普拉斯銳化增強(qiáng)圖像與平滑sobel圖像相乘可得掩蔽圖像;第六步將原始圖像與掩蔽圖像相加可得銳化增強(qiáng)圖像;第七步對(duì)銳化增強(qiáng)圖像進(jìn)行灰度冪律變換可得最終結(jié)果。人體全身骨骼核掃描圖像的混合空間增強(qiáng)案例的python代碼如下所示,其混合空間增強(qiáng)結(jié)果如圖3-21所示。fromskimageimportio,filtersfrommatplotlibimportpyplotaspltimportnumpyasnp#圖像空間濾波函數(shù)defcorrel2d(img,window):m=window.shape[0]n=window.shape[1]#邊界通過(guò)0灰度值來(lái)填充擴(kuò)展img1=np.zeros((img.shape[0]+m-1,img.shape[1]+n-1))img1[(m-1)//2:(img.shape[0]+(m-1)//2),(n-1)//2:(img.shape[1]+(n-1)//2)]=imgimg2=np.zeros(img.shape)foriinrange(img2.shape[0]):forjinrange(img2.shape[1]):temp=img1[i:i+m,j:j+n]img2[i,j]=np.sum(np.multiply(temp,window))returnimg2#img為原始圖像img=io.imread('boneScan.tif',as_gray=True)#img_lapl

溫馨提示

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

評(píng)論

0/150

提交評(píng)論