Python圖像處理之圖像清晰度評價(jià)
0、實(shí)現(xiàn)效果
能夠通過一張標(biāo)準(zhǔn)圖,對同一組相機(jī)拍攝的照片進(jìn)行清晰度評價(jià)。
1、概述
圖像清晰度是用來指導(dǎo)調(diào)焦機(jī)構(gòu)找到正焦位置的評價(jià)函數(shù)。理想的清晰度評價(jià)曲線類似于泊松分布,請看下圖:
p點(diǎn)對應(yīng)于正焦位置,P1 和P2 為正焦位置焦前和焦后采集到圖像的清晰度評價(jià)結(jié)果。
正焦的圖像比模糊的離焦圖像邊緣要更加的銳利清晰,相應(yīng)的邊緣像素灰度值變化大,因而會有更大的梯度值,從數(shù)學(xué)的角度來看圖像,它是二維的離散矩陣,利用梯度函數(shù)可獲取圖像的灰度信息,來判別圖像的清晰度,在離散信中梯度表現(xiàn)為差分形式。
2、模糊度分類
1、運(yùn)動模糊
運(yùn)動模糊是在捕獲圖像時,快門在打開時間內(nèi)成像系統(tǒng)和拍攝 對象的短暫相對運(yùn)動,造成成像在某個方向上形成的模糊。
2、壓縮模糊
壓縮模糊是圖像在進(jìn)行有損壓縮丟失部分信息。
3、高斯模糊
高斯模糊是人為引入的一種模糊,使用高斯低通濾波器對原始圖像進(jìn)行濾波得到的。
3、清晰度量化指標(biāo)
Brenner
Brenner梯度函數(shù)是最簡單的梯度評價(jià)函數(shù),它只是簡單的計(jì)算相鄰兩個像素灰度差的平方,該函數(shù)定義如下:
f(x,y) 表示圖像f對應(yīng)像素點(diǎn)(x,y)的灰度值,D(f)為圖像清晰度計(jì)算結(jié)果。
python實(shí)現(xiàn):
def brenner(img): ''' :param img:narray 二維灰度圖像 :return: int 圖像越清晰越大 ''' shapes = np.shape(img) output = 0 for x in range(0, shapes[0]-2): for y in range(0, shapes[1]): output+=(int(img[x+2,y])-int(img[x,y]))**2 return output
能量梯度函數(shù)(Energy of Gradient)
將 x 方向和 y 方向的相鄰像素的灰度值之差的平方和作為每個像素點(diǎn)的梯度值,對所有像素梯度值累加作為清晰度評價(jià)函數(shù)值,表達(dá)式如下所示:
python實(shí)現(xiàn):
def EOG(img): ''' :param img:narray 二維灰度圖像 :return: int 圖像越清晰越大 ''' shapes = np.shape(img) output = 0 for x in range(0, shapes[0]-1): for y in range(0, shapes[1]-1): output+=((int(img[x+1,y])-int(img[x,y]))**2+(int(img[x,y+1])-int(img[x,y]))**2) return output
Roberts
Roberts函數(shù)與能量梯度函數(shù)相似,它是利用對角方向像素點(diǎn)灰度值之差。將4個相鄰像素點(diǎn)的灰度值交叉相減的平方和作為每個像素點(diǎn)的梯度值,對所有像素梯度值累加作為清晰度評價(jià)函數(shù)值,表達(dá)式如下式所示:
python實(shí)現(xiàn):
def Roberts(img): ''' :param img:narray 二維灰度圖像 :return: int 圖像越清晰越大 ''' shapes = np.shape(img) output = 0 for x in range(0, shapes[0]-1): for y in range(0, shapes[1]-1): output+=((int(img[x+1,y+1])-int(img[x,y]))**2+(int(img[x+1,y])-int(img[x,y+1]))**2) return output
Laplace
采用Laplace算子與圖像各個像素點(diǎn)的灰度值進(jìn)行卷積得到一個梯度矩陣記為,取各像素點(diǎn)梯度的平方和作為評價(jià)函數(shù),如下式所示:
python實(shí)現(xiàn):
def Laplacian(img): ''' :param img:narray 二維灰度圖像 :return: int 圖像越清晰越大 ''' return cv2.Laplacian(img,cv2.CV_64F).var()
由于之前推導(dǎo)過,你可以查看此文,這是我以前所寫的一篇博客:圖像處理:邊緣檢測原理
SMD(灰度方差)函數(shù)
當(dāng)完全聚焦時,圖像最清晰,圖像中的高頻分量也最多,故可將灰度變化作為聚焦評價(jià)的依據(jù),灰度方差法的公式如下:
python實(shí)現(xiàn):
def SMD(img): ''' :param img:narray 二維灰度圖像 :return: int 圖像越清晰越大 ''' shape = np.shape(img) output = 0 for x in range(1, shape[0]-1): for y in range(0, shape[1]): output+=math.fabs(int(img[x,y])-int(img[x,y-1])) output+=math.fabs(int(img[x,y]-int(img[x+1,y]))) return output
SMD2 (灰度方差乘積)函數(shù)
SDM函數(shù)具有較好的計(jì)算性能,但其缺點(diǎn)也很明顯,即在焦點(diǎn)附近靈敏度不高,即該函數(shù)在極值點(diǎn)附近過于平坦,從而導(dǎo)致聚焦精度難以提高。在《一種快速高靈敏度聚焦評價(jià)函數(shù)》中李郁峰等人在論文中提出了一種新的評價(jià)函數(shù),稱之為灰度方差乘積法,即對每一個像素領(lǐng)域兩個灰度差相乘后再逐個像素累加,該函數(shù)定義如下:
python實(shí)現(xiàn):
def SMD2(img): ''' :param img:narray 二維灰度圖像 :return: int 圖像約清晰越大 ''' shape = np.shape(img) output = 0 for x in range(0, shape[0]-1): for y in range(0, shape[1]-1): output+=math.fabs(int(img[x,y])-int(img[x+1,y]))*math.fabs(int(img[x,y]-int(img[x,y+1]))) return output
4、圖像清晰度評價(jià)實(shí)現(xiàn)
SWD2:
import cv2 import pyps.pyzjr.definition as din import pyps.pyzjr.utility as ult image=ult.read_resize_image("./compare/8881.jpg",space=True) img = din.SMD2(image) print(img) cv2.putText(image, f"definition:{img:.2f}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 3) cv2.imshow("definition_Image", image) cv2.waitKey(0)
Brenner:
Laplacian:
5、總結(jié)與評價(jià)
很遺憾,本次的清晰度評價(jià)失敗了,如果想要得到一個邊界值幾乎不可能實(shí)現(xiàn),哪怕通過大量圖像數(shù)據(jù)(模糊圖像與清晰圖像)也不能完成,因?yàn)檫@些清晰度量化指標(biāo)函數(shù)都是通過求圖像像素的梯度,換湯不換藥,在不同場景不同模糊的條件下很難去進(jìn)行比對。
到此這篇關(guān)于Python圖像處理之圖像清晰度評價(jià)的文章就介紹到這了,更多相關(guān)Python圖像清晰度評價(jià)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過python繪制華強(qiáng)買瓜的字符畫視頻的步驟詳解
要把華強(qiáng)賣瓜做成字符視頻大概分為三步,通過讀取視頻,把每一幀轉(zhuǎn)為字符畫,接著把字符畫表現(xiàn)出來,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-11-11python3獲取當(dāng)前文件的上一級目錄實(shí)例
下面小編就為大家分享一篇python3獲取當(dāng)前文件的上一級目錄實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python常用內(nèi)建模塊hashlib、hmac詳解
這篇文章主要介紹了Python常用內(nèi)建模塊hashlib、hmac詳解,摘要算法又稱哈希算法、散列算法,它通過一個函數(shù),把任意長度的數(shù)據(jù)轉(zhuǎn)換為一個長度固定的數(shù)據(jù)串,需要的朋友可以參考下2023-08-08