智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第七章 圖像退化和復(fù)原_第1頁(yè)
智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第七章 圖像退化和復(fù)原_第2頁(yè)
智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第七章 圖像退化和復(fù)原_第3頁(yè)
智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第七章 圖像退化和復(fù)原_第4頁(yè)
智能圖像處理:Python和OpenCV實(shí)現(xiàn)-課件 第七章 圖像退化和復(fù)原_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第七章圖像退化和復(fù)原目錄Contents圖像退化與復(fù)原機(jī)理圖像的運(yùn)動(dòng)模糊圖像的逆濾波圖像的維納濾波圖像質(zhì)量的評(píng)價(jià)何為圖像退化和復(fù)原圖像的退化是指圖像在形成、傳輸和記錄過(guò)程中,由于成像系統(tǒng)、傳輸介質(zhì)和設(shè)備的不完善,使圖像的質(zhì)量下降。針對(duì)這些問(wèn)題,我們需要對(duì)退化后的圖像進(jìn)行復(fù)原,圖像復(fù)原就是盡可能恢復(fù)退化圖像的本來(lái)面目,它是沿圖像退化的逆過(guò)程進(jìn)行處理,也就是如果我們知道圖像是經(jīng)歷了什么樣的過(guò)程導(dǎo)致退化,就可以按其逆過(guò)程來(lái)復(fù)原圖像。7.1圖像退化和復(fù)原機(jī)理1.圖像退化:圖像退化就是圖像因?yàn)槟撤N原因從“正?!眻D像變得“不正常”,典型的表現(xiàn)有模糊、失真、有噪聲等。圖像退化模型:輸入圖像f(x,y)經(jīng)過(guò)某個(gè)退化系統(tǒng)H(x,y),再疊加上噪聲n(x,y),形成退化后的圖像g(x,y)。H(x,y)+f(x,y)n(x,y)g(x,y)

復(fù)原函數(shù)g(x,y)

圖像復(fù)原的步驟:確定參考圖像,作為圖像退化/復(fù)原模型的評(píng)估標(biāo)準(zhǔn);設(shè)計(jì)圖像退化算法,引入運(yùn)動(dòng)模糊和白噪聲;傳統(tǒng)算法的原理及編程實(shí)現(xiàn);評(píng)價(jià)函數(shù)的設(shè)計(jì)及編程實(shí)現(xiàn);過(guò)程評(píng)估和結(jié)果分析。7.2圖像的運(yùn)動(dòng)模糊運(yùn)動(dòng)模糊圖像是由同一圖像在產(chǎn)生距離延遲后與原圖像疊加而成。令x0(t)和y0(t)分別代表位移的x分量和y分量,那么在相機(jī)快門開(kāi)啟的時(shí)間T內(nèi),圖像傳感器上某點(diǎn)的總曝光量是圖像在移動(dòng)過(guò)程中一系列相應(yīng)像素的亮度對(duì)該點(diǎn)作用的總和。即,如果快門開(kāi)啟與關(guān)閉的時(shí)間忽略不計(jì),則有:

實(shí)現(xiàn)運(yùn)動(dòng)模糊的模型函數(shù)為motion_process(image_size,motion_angle),它包含兩個(gè)參數(shù):圖像的尺寸大小image_size以及運(yùn)動(dòng)的角度motion_angle。當(dāng)運(yùn)動(dòng)位移為degree、運(yùn)動(dòng)角度為angle度時(shí),則該模型函數(shù)的構(gòu)建過(guò)程如下:首先是創(chuàng)建與圖像同等大小的全0矩陣,然后找到全0矩陣的中心行數(shù)center_position,再計(jì)算出運(yùn)動(dòng)角度的正切(tan)值與余切(cot)值,算出運(yùn)動(dòng)的偏移量offset。再令α≤45°時(shí),PSF[int(center_position+offset),int(center_position-offset)]=1α>45°時(shí),PSF[int(center_position-offset),int(center_position+offset)]=1其中PSF為點(diǎn)擴(kuò)散函數(shù)。【例7.1】根據(jù)運(yùn)動(dòng)模糊的模型函數(shù)生成任意角度的運(yùn)動(dòng)模糊圖像。程序代碼如下:importcv2importmathimportnumpyasnpimportmatplotlib.pyplotasplt#仿真運(yùn)動(dòng)模糊defmotion_process(image_size,motion_angle):PSF=np.zeros(image_size)center_position=(image_size[0]-1)/2

slope_tan=math.tan(motion_angle*math.pi/180)slope_cot=1/slope_tanifslope_tan<=1:foriinrange(15):offset=round(i*slope_tan)PSF[int(center_position+offset),int(center_position-offset)]=1returnPSF/PSF.sum()#對(duì)點(diǎn)擴(kuò)散函數(shù)進(jìn)行歸一化亮度else:foriinrange(15):offset=round(i*slope_cot)PSF[int(center_position-offset),int(center_position+offset)]=1returnPSF/PSF.sum()#對(duì)圖像進(jìn)行運(yùn)動(dòng)模糊defmake_blurred(input,PSF,eps):input_fft=np.fft.fft2(input)#二維數(shù)組的傅里葉變換PSF_fft=np.fft.fft2(PSF)+epsblurred=np.fft.ifft2(input_fft*PSF_fft)blurred=np.abs(np.fft.fftshift(blurred))returnblurredimg=cv2.imread('d:/pics/lena.jpg')img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)plt.subplot(121),plt.axis('off')plt.title("Originimage"),plt.imshow(img_gray)#進(jìn)行運(yùn)動(dòng)模糊處理img_h,img_w=img.shape[0:2]PSF=motion_process((img_h,img_w),60)blurred=np.abs(make_blurred(img_gray,PSF,1e-3))plt.subplot(122),plt.axis('off')plt.title("Motionblurred")plt.imshow(blurred)程序運(yùn)行結(jié)果如圖7-1所示原圖像(b)運(yùn)動(dòng)模糊后的圖像圖7-1運(yùn)動(dòng)模糊圖像【例7.2】根據(jù)運(yùn)動(dòng)模糊核(kernel)矩陣生成運(yùn)動(dòng)模糊圖像。程序代碼如下:importcv2importnumpyasnp

defmotion_blur(image,degree=12,angle=45):image=np.array(image)#生成任意角度的運(yùn)動(dòng)模糊kernel的矩陣,degree越大,模糊程度越高M(jìn)=cv2.getRotationMatrix2D((degree/2,degree/2),angle,1)motion_blur_kernel=np.diag(np.ones(degree))#輸出矩陣的對(duì)角線元素#放射變換函數(shù)motion_blur_kernel=cv2.warpAffine(motion_blur_kernel,M,(degree,degree))motion_blur_kernel=motion_blur_kernel/degreeblurred=cv2.filter2D(image,-1,motion_blur_kernel)cv2.normalize(blurred,blurred,0,255,cv2.NORM_MINMAX)#歸一化函數(shù)blurred=np.array(blurred,dtype=np.uint8)returnblurred

img=cv2.imread('d:/pics/lena.jpg')img_blurred=motion_blur(img)cv2.imshow('Originimage',img)cv2.imshow('Blurredimage',img_blurred)cv2.waitKey(0)cv2.destroyAllWindows()程序運(yùn)行結(jié)果如圖7-2所示。(a)原圖像(b)運(yùn)動(dòng)模糊后的圖像圖7-2運(yùn)動(dòng)模糊圖像7.3圖像的逆濾波

【例7.3】使用逆濾波算法對(duì)運(yùn)動(dòng)模糊圖像進(jìn)行濾波。程序代碼如下:importcv2importmathimportnumpyasnpimportmatplotlib.pyplotasplt

#仿真運(yùn)動(dòng)模糊defmotion_process(image_size,motion_angle):PSF=np.zeros(image_size)center_position=(image_size[0]-1)/2

slope_tan=math.tan(motion_angle*math.pi/180)slope_cot=1/slope_tanifslope_tan<=1:foriinrange(15):offset=round(i*slope_tan)PSF[int(center_position+offset),int(center_position-offset)]=1returnPSF/PSF.sum()#對(duì)點(diǎn)擴(kuò)散函數(shù)進(jìn)行歸一化亮度else:foriinrange(15):offset=round(i*slope_cot)PSF[int(center_position-offset),int(center_position+offset)]=1returnPSF/PSF.sum()#對(duì)圖片進(jìn)行運(yùn)動(dòng)模糊defmake_blurred(input,PSF,eps):input_fft=np.fft.fft2(input)#進(jìn)行二維數(shù)組的傅里葉變換PSF_fft=np.fft.fft2(PSF)+epsblurred=np.fft.ifft2(input_fft*PSF_fft)blurred=np.abs(np.fft.fftshift(blurred))returnblurreddefinverse(input,PSF,eps):#逆濾波input_fft=np.fft.fft2(input)PSF_fft=np.fft.fft2(PSF)+eps#噪聲功率,這是已知的,考慮epsilonresult=np.fft.ifft2(input_fft/PSF_fft)#計(jì)算F(u,v)的傅里葉反變換result=np.abs(np.fft.fftshift(result))returnresultif__name__=='__main__':image=cv2.imread('d:/pics/lena.jpg')image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#進(jìn)行運(yùn)動(dòng)模糊處理img_h,img_w=image.shape[0:2]PSF=motion_process((img_h,img_w),60)blurred=np.abs(make_blurred(image,PSF,1e-3))plt.subplot(221),plt.axis('off')plt.title("Motionblurred")plt.imshow(blurred)result_inv=inverse(blurred,PSF,1e-3)#逆濾波plt.subplot(222),plt.axis('off')plt.title("inversedeblurred")plt.imsave('d:\pics\lenaInv.jpg',result_inv)plt.imshow(result_inv)#添加噪聲,standard_normal產(chǎn)生隨機(jī)的函數(shù)blurred_noisy=blurred+0.1*blurred.std()*np.random.standard_normal(blurred.shape)plt.subplot(223),plt.axis('off')plt.title("motion&noisyblurred")plt.imshow(blurred_noisy)#顯示添加噪聲且運(yùn)動(dòng)模糊的圖像

#對(duì)添加噪聲的圖像進(jìn)行逆濾波result_invn=inverse(blurred_noisy,PSF,0.1+1e-3)plt.subplot(224),plt.axis('off')plt.title("Nioseinversedeblurred")plt.imsave('d:\pics\lenaInvn.jpg',result_invn)plt.imshow(result_invn)plt.show()程序運(yùn)行結(jié)果如圖7-3所示。圖中左上圖為運(yùn)動(dòng)模糊圖像,右上圖為對(duì)左上圖逆濾波后的圖像;左下圖像為運(yùn)動(dòng)模糊+噪聲圖像,右下圖為對(duì)左下圖逆濾波后的圖像。圖7-3運(yùn)動(dòng)模糊逆濾波圖像7.4圖像的維納濾波

其中,H(u,v)為退化函數(shù),H*(u,v)為H(u,v)的復(fù)共軛,|H(u,v)|2=H(u,v)H*(u,v),Sη(u,v)=|N(u,v)|2=噪聲的功率譜,Sf(u,v)=|F(u,v)|2=未退化圖像的功率譜,H(u,v)是退化函數(shù)的傅里葉變換,G(u,v)是退化后圖像的傅里葉變換。從上面的公式可以發(fā)現(xiàn),如沒(méi)有噪聲,即Sη(u,v)=0,此時(shí)維納濾波變?yōu)橹苯幽鏋V波,如有噪聲,那么Sη(u,v)如何估計(jì)將成問(wèn)題,同時(shí)Sf(u,v)的估計(jì)也成問(wèn)題。在實(shí)際應(yīng)用中假設(shè)退化函數(shù)已知,如果噪聲為高斯白噪聲,則Sη(u,v)為常數(shù),但Sf(u,v)通常難以估計(jì)。一種近似的解決辦法是用一個(gè)系數(shù)K代替Sη(u,v)/Sf(u,v),因此公式7-5變?yōu)楣?-6所示:在假設(shè)噪聲和圖像不相關(guān),其中一個(gè)或另一個(gè)有零均值,且估計(jì)中的灰度級(jí)是退化圖像中灰度級(jí)的線性函數(shù)的條件下,均方誤差函數(shù)的最小值在頻率域有如公式7-5所示:

【例7.4】使用維納濾波對(duì)運(yùn)動(dòng)模糊圖像進(jìn)行濾波處理。程序代碼如下:importcv2importmathimportnumpyasnpimportmatplotlib.pyplotasplt

#仿真運(yùn)動(dòng)模糊defmotion_process(image_size,motion_angle):PSF=np.zeros(image_size)center_position=(image_size[0]-1)/2slope_tan=math.tan(motion_angle*math.pi/180)slope_cot=1/slope_tanifslope_tan<=1:foriinrange(15):offset=round(i*slope_tan)PSF[int(center_position+offset),int(center_position-offset)]=1returnPSF/PSF.sum()#對(duì)點(diǎn)擴(kuò)散函數(shù)進(jìn)行歸一化亮度

else:foriinrange(15):offset=round(i*slope_cot)PSF[int(center_position-offset),int(center_position+offset)]=1returnPSF/PSF.sum()#對(duì)圖像進(jìn)行運(yùn)動(dòng)模糊defmake_blurred(input,PSF,eps):input_fft=np.fft.fft2(input)#二維數(shù)組的傅里葉變換PSF_fft=np.fft.fft2(PSF)+epsblurred=np.fft.ifft2(input_fft*PSF_fft)blurred=np.abs(np.fft.fftshift(blurred))returnblurreddefwiener(input,PSF,eps,K=0.01):#維納濾波,K=0.01input_fft=np.fft.fft2(input)PSF_fft=np.fft.fft2(PSF)+epsPSF_fft_1=np.conj(PSF_fft)/(np.abs(PSF_fft)**2+K)result=np.fft.ifft2(input_fft*PSF_fft_1)result=np.abs(np.fft.fftshift(result))returnresultif__name__=='__main__':image=cv2.imread('d:/pics/lena.jpg')image=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#進(jìn)行運(yùn)動(dòng)模糊處理img_h,img_w=image.shape[0:2]PSF=motion_process((img_h,img_w),60)blurred=np.abs(make_blurred(image,PSF,1e-3))plt.subplot(221),plt.axis('off')plt.title("Motionblurred")plt.imshow(blurred)plt.imsave('d:\pics\lenaMb.jpg',blurred)

resultwd=wiener(blurred,PSF,1e-3)#維納濾波plt.subplot(222),plt.axis('off')plt.title("wienerdeblurred(k=0.01)")plt.imshow(resultwd)plt.imsave('d:\pics\lenaWd.jpg',resultwd)

#添加噪聲,standard_normal產(chǎn)生隨機(jī)的函數(shù)

blurred_noisy=blurred+0.1*blurred.std()*np.random.standard_normal(blurred.shape)plt.subplot(223),plt.axis('off')plt.title("motion&noisyblurred")plt.imshow(blurred_noisy)#顯示添加噪聲且運(yùn)動(dòng)模糊的圖像

#對(duì)添加噪聲的圖像進(jìn)行維納濾波resultwdn=wiener(blurred_noisy,PSF,0.1+1e-3)plt.subplot(224),plt.axis('off')plt.title("wienerdeblurred(k=0.01)")plt.imshow(resultwdn)plt.show()程序運(yùn)行結(jié)果如圖7-4所示。圖中左上圖為運(yùn)動(dòng)模糊圖像,右上圖為對(duì)左上圖維納濾波后的圖像;左下圖像為運(yùn)動(dòng)模糊+噪聲圖像,右下圖為對(duì)左下圖維納濾波后的圖像。圖7-4運(yùn)動(dòng)模糊維納濾波后的圖像在程序中可以修改運(yùn)動(dòng)模糊的角度,觀察不同的角度取值情況下的模糊效果。對(duì)比7-3的逆濾波和圖7-4的維納濾波,從效果來(lái)看維納濾波對(duì)圖像去運(yùn)動(dòng)模糊效果較好。7.5圖像質(zhì)量的評(píng)價(jià)圖像修復(fù)模型的好壞需要對(duì)結(jié)果品質(zhì)進(jìn)行評(píng)價(jià),衡量圖像修復(fù)的指標(biāo)主要有以下三種:主觀評(píng)價(jià)方法:由觀測(cè)者對(duì)圖像質(zhì)量進(jìn)行主觀評(píng)估,大部分在實(shí)際生產(chǎn)中好多師傅會(huì)采用此法,雖不科學(xué),但這種一般是最終決定產(chǎn)品好壞的方法。主觀質(zhì)量評(píng)分法是圖像質(zhì)量最具代表性的主觀評(píng)價(jià)方法,它通過(guò)對(duì)觀察者的評(píng)價(jià)判斷圖像質(zhì)量。主觀評(píng)價(jià)方法與人的主觀感受相符,但費(fèi)時(shí)、復(fù)雜,還會(huì)受到觀測(cè)者專業(yè)背景、心理和動(dòng)機(jī)等主觀因素的影響,并且不能結(jié)合到其他算法中使用??陀^評(píng)價(jià)方法:圖像質(zhì)量的客觀評(píng)價(jià)方法是根據(jù)人眼的主觀視覺(jué)系統(tǒng)建立數(shù)學(xué)模型,并通過(guò)具體的公式計(jì)算圖像的質(zhì)量。客觀評(píng)價(jià)方法方便、快捷,容易實(shí)現(xiàn)并能結(jié)合到應(yīng)用系統(tǒng)中,但它和人的主觀感受有出入。通常提到的圖像質(zhì)量評(píng)價(jià)算法是指客觀評(píng)價(jià)算法,其目標(biāo)是獲得與主觀評(píng)價(jià)結(jié)果相一致的客觀評(píng)價(jià)值。傳統(tǒng)的圖像質(zhì)量客觀評(píng)價(jià)方法主要包括均方誤差(MSE,meansquarederror)和峰值信噪比(PSNR,peaksignaltonoiserate)。均方誤差(MSE)首先計(jì)算原始圖像和失真圖像像素差值的均方值,然后通過(guò)均方值的大小來(lái)確定失真圖像的失真程度。基于Python定義的均方誤差MSE函數(shù)為:defmse(img1,img2):mse=np.mean((img1/255.-img2/255.)**2)returnmse

其中MaxValue2表示為存儲(chǔ)最大位數(shù)2bits?1,對(duì)圖像而言bits=8,MaxValue=255。PSNR指標(biāo)越高,說(shuō)明圖像質(zhì)量越好?;赑ython的定義的峰值信噪比PSNR函數(shù)為:defpsnr(img1,img2):mse=np.mean((img1/1.0-img2/1.0)**2)ifmse<1.0e-10:return100return10*math.log10(255.0**2/mse)3.結(jié)構(gòu)相似性評(píng)價(jià)方法(SSIM,StructuralSimilarity)。該評(píng)價(jià)方法是在2001年提出的,它是一種衡量電視、電影或者其他數(shù)字圖像、視頻的主觀感受質(zhì)量的一種方法。SSIM算法是用來(lái)測(cè)試兩幅圖像的相似性,其測(cè)量或者預(yù)測(cè)圖像的質(zhì)量是基于未壓縮的或者無(wú)失真的圖像作為參考的。SSIM算法在設(shè)計(jì)上考慮了人眼的視覺(jué)特性,比傳統(tǒng)方式更符合人眼視覺(jué)感知,它從自然圖像高度結(jié)構(gòu)化的特征出發(fā),通過(guò)亮度(luminance)、對(duì)比度(contrast)和結(jié)構(gòu)(structure)三個(gè)方面估計(jì)感知結(jié)構(gòu)信息的變化。結(jié)構(gòu)信息是指像素之間有著內(nèi)部的依賴性,尤其是空間上靠近的像素點(diǎn),這些依賴性攜帶著目標(biāo)對(duì)象視覺(jué)感知上的重要信息。

結(jié)構(gòu)相似性指標(biāo)也是一種用以衡量?jī)蓮垟?shù)字圖像相似程度的指標(biāo)。當(dāng)兩張圖像其中一張為無(wú)失真圖像,另一張為失真后的圖像,二者的結(jié)構(gòu)相似性可以看成是失真圖像的圖像品質(zhì)衡量指標(biāo)。相較于傳統(tǒng)所使用的圖像品質(zhì)衡量指標(biāo)(如MSE、PSNR),結(jié)構(gòu)相似性在圖像品質(zhì)的衡量上更能符合人眼對(duì)圖像品質(zhì)的判斷?!纠?.5】使用numpy庫(kù)函數(shù)對(duì)維納濾波圖像求解MSE、PSNR和SSIM評(píng)價(jià)參數(shù)。程序代碼如下:importcv2importmathimportnumpyasnpfromscipy.signalimportconvolve2ddefcompute_mse(img1,img2):mse=np.mean((img1/255.-img2/255.)**2)returnmsedefcompute_psnr(img1,img2):mse=np.mean((img1/1.0-img2/1.0)**2)ifmse<1.0e-10:return100return10*math.log10(255.0**2/mse)defmatlab_style_gauss2D(shape=(3,3),sigma=0.5):m,n=[(ss-1.)/2.forssinshape]y,x=np.ogrid[-m:m+1,-n:n+1]h=np.exp(-(x*x+y*y)/(2.*sigma*sigma))h[h<np.finfo(h.dtype).eps*h.max()]=0sumh=h.sum()ifsumh!=0:h/=sumhreturnhdeffilter2(x,kernel,mode='same'):returnconvolve2d(x,np.rot90(kernel,2),mode=mode)defcompute_ssim(im1,im2,k1=0.01,k2=0.03,win_size=11,L=255):ifnotim1.shape==im2.shape:raiseValueError("InputImageesmusthavethesamedimensions")iflen(im1.shape)>2:raiseValueError("Pleaseinputtheimageswith1channel")M,N=im1.shapeC1=(k1*L)**2C2=(k2*L)**2window=matlab_style_gauss2D(shape=(win_size,win_size),sigma=1.5)window=window/np.sum(np.sum(window))ifim1.dtype==np.uint8:im1=np.double(im1)ifim2.dtype==np.uint8:im2=np.double(im2)mu1=filter2(im1,window,'valid')mu2=filter2(im2,window,'valid')mu1_sq=mu1*mu1mu2_sq=mu2*mu2mu1_mu2=mu1*mu2sigma1_sq=filter2(im1*im1,window,'valid')-mu1_sqsigma2_sq=filter2(im2*im2,window,'valid')-mu2_sqsigmal2=filter2(im1*im2,window,'valid')-mu1_mu2ssim_map=((2*mu1_mu2+C1)*(2*sigmal2+C2))/((mu1_sq+mu2_sq+C1)*(sigma1_sq+sigma2_sq+C2))returnnp.mean(np.mean(ssim_map))if__name__=='__main__':img_origin=cv2.imread('d:/pics/lenaorig.jpg',0)cv2.imshow('Originimage',img_origin)img_Mb=cv2.imread('d:/pics/lenaMb.jpg',0)cv2.imshow('Moveblurimage',img_Mb)img_wd=cv2.imread('d:/pics/lenaWd.jpg',0)cv2.imshow('Winerfilterimage',img_wd)img_wdn=cv2.imread('d:/pics/lenaWdn.jpg',0)cv2.imshow('nWinernoisefilterimage',img_wdn)

#原圖與運(yùn)動(dòng)模糊后的維納濾波圖像之間的評(píng)價(jià)參數(shù)mse=compute_mse(img_origin,img_wd)print('MSE:{}'.format(mse))psnr=compute_psnr(img_origin,img_wd)print('PSNR:{}'.format(psnr))ssim=compute_ssim(img_origin,img_wd)print('SSIM:{}'.format(ssim))#原圖與運(yùn)動(dòng)模糊+噪聲后的維納濾波圖像之間的評(píng)價(jià)參數(shù)mse=compute_mse(img_origin,img_wdn)print('MSE:{}'.format(mse))psnr=compute_psnr(img_origin,img_wdn)print('PSNR:{}'.format(psnr))ssim=compute_ssim(img_origin,img_wdn)print('SSIM:{}'.format(ssim))

cv2.waitKey(0)cv2.destroyAllWindows()(1)基于運(yùn)動(dòng)模糊圖像的維納濾波后的參數(shù)為:MSE:0.001349162245290273PSNR:28.69935820530212SSIM:0.8315891237838533(d)帶有噪聲的維納濾波圖像(a)原圖像(b)運(yùn)動(dòng)模糊圖像圖7-5運(yùn)動(dòng)模糊維納濾波圖像(c)維納濾波圖像程序運(yùn)行結(jié)果如圖7-5所示,其輸出的圖像評(píng)價(jià)參數(shù)為:(2)運(yùn)動(dòng)模糊+噪聲圖像的維納濾波后的參數(shù)為:MSE:0.010067537870049981PSNR:19.970767280753556SSIM:0.5047339796956921【例7.6】使用numpy庫(kù)函數(shù)對(duì)逆濾波圖像求解MSE、PSNR和SSIM評(píng)價(jià)參數(shù)圖像質(zhì)量的評(píng)價(jià)。程序代碼如下:importcv2importmathimportnumpyasnpfromscipy.signalimportconvolve2ddefcompute_mse(img1,img2):mse=np.mean((img1/255.-img2/255.)**2)returnmsedefcompute_psnr(img1,img2):mse=np.mean((img1/1.0-img2/1.0)**2)ifmse<1.0e-10:return100return10*math.log10(255.0**2/mse)defmatlab_style_gauss2D(shape=(3,3),sigma=0.5):m,n=[(ss-1.)/2.forssinshape]y,x=np.ogrid[-m:m+1,-n:n+1]h=np.exp(-(x*x+y*y)/(2.*sigma*sigma))h[h<np.finfo(h.dtype).eps*h.max()]=0sumh=h.sum()ifsumh!=0:h/=sumhreturnhdeffilter2(x,kernel,mode='same'):returnconvolve2d(x,np.rot90(kernel,2),mode=mode)

defcompute_ssim(im1,im2,k1=0.01,k2=0.03,win_size=11,L=255):ifnotim1.shape==im2.shape:raiseValueError("InputImageesmusthavethesamedimensions")iflen(im1.shape)>2:raiseValueError("Pleaseinputtheimageswith1channel")M,N=im1.shapeC1=(k1*L)**2C2=(k2*L)**2window=matlab_style_gauss2D(shape=(win_size,win_size),sigma=1.5)window=window/np.sum(np.sum(window))ifim1.dtype==np.uint8:im1=np.double(im1)ifim2.dtype==np.uint8:im2=np.double(im2)mu1=filter2(im1,window,'valid')mu2=filter2(im2,window,'valid')mu1_sq=mu1*mu1mu2_sq=mu2*mu2mu1_mu2=mu1*mu2sigma1_sq=filter2(im1*im1,window,'valid')-mu1_sqsigma2_sq=filter2(im2*im2,window,'valid')-mu2_sqsigmal2=filter2(im1*im2,window,'valid')-mu1_mu2ssim_map=((2*mu1_mu2+C1)*(2*sigmal2+C2))/((mu1_sq+mu2_sq+C1)*(sigma1_sq+sigma2_sq+C2))returnnp.mean(np.mean(ssim_map))if__name__=='__main__':img_origin=cv2.imread('d:/pics/lenaorig.jpg',0)cv2.imshow('Originimage',img_origin)img_Mb=cv2.imread('d:/pics/lenaMb.jpg',0)cv2.imshow('Moveblurimage',img_Mb)

img_inv=cv2.imread('d:/pics/lenainv.jpg',0)cv2.imshow('Inversefilterimage',img_inv)img_invn=cv2.imread('d:/pics/lenainvn.jpg',0)cv2.imshow('Noiseinversefilterimage',img_invn)#原圖與運(yùn)動(dòng)模糊后的逆濾波圖像之間的評(píng)價(jià)參數(shù)mse=compute_mse(img_origin,img_inv)print('MSE:{}'.format(mse))psnr=compute_psnr(img_origin,img_inv)print('PSNR:{}'.format(psnr))ssim=compute_ssim(img_origin,img_inv)print('SSIM:{}'.format(ssim))#原圖與運(yùn)動(dòng)模糊+噪聲后的逆濾波圖像之間的評(píng)價(jià)參數(shù)mse=compute_mse(img_origin,img_invn)print('MSE:{}'.format(mse))psnr=compute_psnr(img_origin,img_invn)print('PSNR:{}'.format(psnr))ssim=compute_ssim(img_origin,img_invn)print('SSIM:{}'.format(ssim))cv2.waitKey(0)cv2.destroyAllWindows()(1)基于運(yùn)動(dòng)模糊圖像的逆濾波后的參數(shù)為:MSE:1.2172241445597847e-06PSNR:59.146294416695355SSIM:0.9995992013825972(a)原圖像(b)運(yùn)動(dòng)模糊圖像(c)逆濾波圖像(d)帶有噪聲的逆濾波圖像圖7-6運(yùn)動(dòng)模糊逆濾波圖像(2)運(yùn)動(dòng)模糊+噪聲圖像的逆濾波后的參數(shù)為:MSE:0.04287537024221453PSNR:13.677921166644737SSIM:0.18683314611701046程序運(yùn)行結(jié)果如圖7-6所示,其輸出的圖像評(píng)價(jià)參數(shù)為:【例7.7】使用skimage庫(kù)函數(shù)對(duì)維納濾波圖像求解MSE、PSNR和SSIM評(píng)價(jià)參數(shù)。程序代碼如下:importcv2fromskimage.measureimportcompare_msefromskimage.measureimportcompare_psnrfromskimage.measureimportcompare_ssim

img_origin=cv2.imread('d:/pics/lenaorig.jpg',0)cv2.imshow('Originimage',img_origin)img_Mb=cv2.imread('d:/pics/lenaMb.jpg',0)cv2.imshow('Moveblurimage',img_Mb)img_wd=cv2.imread('d:/pics/lenaWd.jpg',0)cv2.imshow('Winerfilterimage',img_wd)img_wdn=cv2.imread('d:/pics/lenaWdn.jpg',0)cv2.imshow('nWinernoisefilterimage',img_wdn)#原圖與運(yùn)動(dòng)模糊后的維納濾波圖像之間的評(píng)價(jià)參數(shù)mse=compare_mse(img_origin,img_wd)print('MSE:{}'.format(mse))psnr=compare_psnr(img_origin,img_wd)print('PSNR:{}'.format(psnr))ssim=compare_ssim(img_origin,img_wd)print('SSIM:{}'.format(ssim))#原圖與運(yùn)動(dòng)模糊+噪聲后的維納濾波圖像之間的評(píng)價(jià)參數(shù)mse=compare_mse(img_origin,img_wdn)print('MSE:{}'.format(mse))psnr=compare_psnr(img_origin,img_wdn)print('PSNR:{}'.format(psnr))ssim=compare_ssim(img_origin,img_wdn)print('SSIM:{}'.format(ssim))cv2.waitKey(0)cv2.destroyAllWindows()(d)帶有噪聲的維納濾波圖像(a)原圖像(b)運(yùn)動(dòng)模糊圖像圖7-7運(yùn)動(dòng)模糊維納濾波圖像(c)維納濾波圖像

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論