天天看點

圖像清晰度評價與實作方法

圖像清晰度是衡量圖像品質的一個重要名額,對于相機來說,其一般工作在無參考圖像的模式下,是以在拍照時需要進行對焦的控制。對焦不準确,圖像就會變得比較模糊不清晰。相機對焦時通過一些清晰度評判名額,控制鏡頭與CCD的距離,使圖像成像清晰。一般對焦時有一個調整的過程,圖像從模糊到清晰,再到模糊,确定清晰度峰值,再最終到達最清晰的位置。

常見的圖像清晰度評價一般都是基于梯度的方法,本文将介紹五種簡單的評價名額,分别是Brenner梯度法、Tenegrad梯度法、laplace梯度法、方差法、能量梯度法。

Brenner梯度法:

計算相差兩個單元的兩個像素點的灰階差:

FBrenner=∑M∑N(f(x+2,y)−f(x,y))2

式中 (f(x+2,y)−f(x,y))2>Threshold算法準确性取決于門檻值的選取。

Tenegrad梯度法:

采用sobel算子分别提取水準和豎直方向的梯度:

FTenegrad=∑M∑N|G(x,y)|

G(x,y)>Threshold

G(x,y)=Gx(x,y)2+Gy(x,y)2

sobel算子模闆如下:

Gx=14⎡⎣⎢−1−2−1000121⎤⎦⎥∗I

Gy=14⎡⎣⎢−101−202−101⎤⎦⎥∗I

Laplace梯度法:

laplace梯度函數與Tenegrad基本一緻,隻需要用Laplace算子替代sobel算子即可:L=16⎡⎣⎢1414204141⎤⎦⎥∗I

方差法:

聚焦清晰的圖像比模糊圖像有更大的灰階差異,可用方差函數作為評價:Fvariance=∑M∑N(f(x,y)−E2)

式中E為整幅圖像的平均灰階值,該函數對噪聲敏感。

能量梯度法:

能量梯度函數适合實時評價圖像清晰度:

FBrenner=∑M∑N((f(x+1,y)−f(x,y))2+(f(x,y+1)−f(x,y))2)

執行個體代碼:

//方差法


region_to_mean(ImageReduced, Image, ImageMean)


convert_image_type(ImageMean, ImageMean, 'real')


convert_image_type(Image, Image, 'real')


sub_image(Image, ImageMean, ImageSub, 1, 0)


mult_image(ImageSub, ImageSub, ImageResult, 1, 0)


intensity(ImageResult, ImageResult, Value, Deviation)


//拉普拉斯梯度函數


laplace(Image, ImageLaplace4, 'signed', 3, 'n_4')


laplace(Image, ImageLaplace8, 'signed', 3, 'n_8')


add_image(ImageLaplace4, ImageLaplace4, ImageResult1, 1, 0)


add_image(ImageLaplace4, ImageResult1, ImageResult1, 1, 0)


add_image(ImageLaplace8, ImageResult1, ImageResult1, 1, 0)


mult_image(ImageResult1, ImageResult1, ImageResult, 1, 0)


intensity(ImageResult, ImageResult, Value, Deviation)


//能量梯度函數


crop_part(Image, ImagePart00, 0, 0, Width-1, Height-1)


crop_part(Image, ImagePart01, 0, 1, Width-1, Height-1)


crop_part(Image, ImagePart10, 1, 0, Width-1, Height-1)


convert_image_type(ImagePart00, ImagePart00, 'real')


convert_image_type(ImagePart10, ImagePart10, 'real')


convert_image_type(ImagePart01, ImagePart01, 'real')


sub_image(ImagePart10, ImagePart00, ImageSub1, 1, 0)


mult_image(ImageSub1, ImageSub1, ImageResult1, 1, 0)


sub_image(ImagePart01, ImagePart00, ImageSub2, 1, 0)


mult_image(ImageSub2, ImageSub2, ImageResult2, 1, 0)


add_image(ImageResult1, ImageResult2, ImageResult, 1, 0)


intensity(ImageResult, ImageResult, Value, Deviation)


//Brenner梯度法


crop_part(Image, ImagePart00, 0, 0, Width, Height-2)


convert_image_type(ImagePart00, ImagePart00, 'real')


crop_part(Image, ImagePart20, 2, 0, Width, Height-2)


convert_image_type(ImagePart20, ImagePart20, 'real')


sub_image(ImagePart20, ImagePart00, ImageSub, 1, 0)


mult_image(ImageSub, ImageSub, ImageResult, 1, 0)


intensity(ImageResult, ImageResult, Value, Deviation)


//Tenegrad梯度法


sobel_amp(Image, EdgeAmplitude, 'sum_sqrt', 3)


min_max_gray(EdgeAmplitude, EdgeAmplitude, 0, Min, Max, Range)


threshold(EdgeAmplitude, Region1, 20, 255)


region_to_bin(Region1, BinImage, 1, 0, Width, Height)


mult_image(EdgeAmplitude, BinImage, ImageResult4, 1, 0)


mult_image(ImageResult4, ImageResult4, ImageResult, 1, 0)


intensity(ImageResult, ImageResult, Value, Deviation)      

結果分析:

處理圖像為一組對焦從模糊到清晰再到模糊的标定闆圖像,如下為其中三幅圖像:

圖像清晰度評價與實作方法

中間為最清晰的圖像。

采用五種評價函數,對一百多幅圖像進行計算,并将結果進行歸一化,得到如圖所示結果:

圖像清晰度評價與實作方法

一個好的評價函數需要具有單峰性,無偏性,靈敏性,在本執行個體中,采用Laplace、能量梯度和Brenner梯度法較好,而方差法效果較差,Tenegrad梯度法反向了。

來源:天眼觀視界

—THE END—