图像清晰度评价与实现方法

共 6555字,需浏览 14分钟

 ·

2024-04-10 23:58


    

点击上方 小白学视觉 ”,选择加" 星标 "或“ 置顶


      

重磅干货,第一时间送达


33d83e75aedf2af51e89f66d9e62f622.webp

来源 | 天眼观视界

图像清晰度是衡量图像质量的一个重要指标,对于相机来说,其一般工作在无参考图像的模式下,所以在拍照时需要进行对焦的控制。对焦不准确,图像就会变得比较模糊不清晰。相机对焦时通过一些清晰度评判指标,控制镜头与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 )− E 2)


式中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)


结果分析:


处理图像为一组对焦从模糊到清晰再到模糊的标定板图像,如下为其中三幅图像:


baffb7cc19fbe7a3a29850c5b13caaf3.webp


中间为最清晰的图像。


采用五种评价函数,对一百多幅图像进行计算,并将结果进行归一化,得到如图所示结果:


48ae4a19048e8b0f80936167326649ad.webp


一个好的评价函数需要具有单峰性,无偏性,灵敏性,在本实例中,采用Laplace、能量梯度和Brenner梯度法较好,而方差法效果较差,Tenegrad梯度法反向了。


    下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:

扩展模块中文教程

即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

小白学视觉公众号后台回复:OpenCV实战项目20讲

即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。



交流群




欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分), 请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~






浏览 57
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报