码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 图像处理:图像清晰度评价


    目录

    0、实现效果

    1、概述

    2、模糊度分类

    1、运动模糊

    2、压缩模糊

    3、高斯模糊

    3、清晰度量化指标

    Brenner

    能量梯度函数(Energy of Gradient)

               ​编辑

    Roberts

    Laplace

    SMD(灰度方差)函数

    SMD2 (灰度方差乘积)函数

    4、图像清晰度评价实现

     5、总结与评价

    参考资料:


    0、实现效果

    能够通过一张标准图,对同一组相机拍摄的照片进行清晰度评价。

    1、概述

    图像清晰度是用来指导调焦机构找到正焦位置的评价函数。理想的清晰度评价曲线类似于泊松分布,请看下图:

    p点对应于正焦位置,P1 和P2 为正焦位置焦前和焦后采集到图像的清晰度评价结果。

    正焦的图像比模糊的离焦图像边缘要更加的锐利清晰,相应的边缘像素灰度值变化大,因而会有更大的梯度值,从数学的角度来看图像,它是二维的离散矩阵,利用梯度函数可获取图像的灰度信息,来判别图像的清晰度,在离散信中梯度表现为差分形式。

    2、模糊度分类

    1、运动模糊

    运动模糊是在捕获图像时,快门在打开时间内成像系统和拍摄 对象的短暂相对运动,造成成像在某个方向上形成的模糊。

    2、压缩模糊

    压缩模糊是图像在进行有损压缩丢失部分信息。

    3、高斯模糊

    高斯模糊是人为引入的一种模糊,使用高斯低通滤波器对原始图像进行滤波得到的。

    3、清晰度量化指标

    Brenner

    Brenner梯度函数是最简单的梯度评价函数,它只是简单的计算相邻两个像素灰度差的平方,该函数定义如下:
                                D(f)=\sum_{y} \sum_{x}\left | f(x+2,y)-f(x,y)\right |^{2}

    f(x,y) 表示图像f对应像素点(x,y)的灰度值,D(f)为图像清晰度计算结果。

    python实现:

    1. def brenner(img):
    2. '''
    3. :param img:narray 二维灰度图像
    4. :return: int 图像越清晰越大
    5. '''
    6. shapes = np.shape(img)
    7. output = 0
    8. for x in range(0, shapes[0]-2):
    9. for y in range(0, shapes[1]):
    10. output+=(int(img[x+2,y])-int(img[x,y]))**2
    11. return output

    能量梯度函数(Energy of Gradient)

    将 x 方向和 y 方向的相邻像素的灰度值之差的平方和作为每个像素点的梯度值,对所有像素梯度值累加作为清晰度评价函数值,表达式如下所示:

               D(f)=\sum_{x} \sum_{y}\left \{[f(x+1,y)-f(x,y)]^{2}+[f(x,y+1)-f(x,y)]^{2}\right \}

    python实现:

    1. def EOG(img):
    2. '''
    3. :param img:narray 二维灰度图像
    4. :return: int 图像越清晰越大
    5. '''
    6. shapes = np.shape(img)
    7. output = 0
    8. for x in range(0, shapes[0]-1):
    9. for y in range(0, shapes[1]-1):
    10. output+=((int(img[x+1,y])-int(img[x,y]))**2+(int(img[x,y+1])-int(img[x,y]))**2)
    11. return output

    Roberts

    Roberts函数与能量梯度函数相似,它是利用对角方向像素点灰度值之差。将4个相邻像素点的灰度值交叉相减的平方和作为每个像素点的梯度值,对所有像素梯度值累加作为清晰度评价函数值,表达式如下式所示:

              D(f)=\sum_{x} \sum_{y}\left \{[f(x+1,y+1)-f(x,y)]^{2}+[f(x+1,y)-f(x,y+1)]^{2}\right \}

     python实现:

    1. def Roberts(img):
    2. '''
    3. :param img:narray 二维灰度图像
    4. :return: int 图像越清晰越大
    5. '''
    6. shapes = np.shape(img)
    7. output = 0
    8. for x in range(0, shapes[0]-1):
    9. for y in range(0, shapes[1]-1):
    10. output+=((int(img[x+1,y+1])-int(img[x,y]))**2+(int(img[x+1,y])-int(img[x,y+1]))**2)
    11. return output

    Laplace

    采用Laplace算子与图像各个像素点的灰度值进行卷积得到一个梯度矩阵记为G(x,y),取各像素点梯度的平方和作为评价函数,如下式所示:

                                                     D(f)=\sum_{x} \sum_{y}\textit{G}^{2}(x,y)

                                            ​​​​​​​           \textit{G}(x,y)=f(x,y)\otimes L

                                                        L=\begin{bmatrix} 0& 1 & 1\\ 1 & -4&1 \\ 0 & 1& 0 \end{bmatrix}

     python实现:

    1. def Laplacian(img):
    2. '''
    3. :param img:narray 二维灰度图像
    4. :return: int 图像越清晰越大
    5. '''
    6. return cv2.Laplacian(img,cv2.CV_64F).var()

     由于之前推导过,你可以查看此文,这是我以前所写的一篇博客:(2条消息) 图像处理:边缘检测原理_夏天是冰红茶的博客-CSDN博客

    SMD(灰度方差)函数

    当完全聚焦时,图像最清晰,图像中的高频分量也最多,故可将灰度变化作为聚焦评价的依据,灰度方差法的公式如下:

                          D(f)=\sum_{y} \sum_{x}(\left |f(x,y)-f(x,y-1) \right |+\left |f(x+1,y)-f(x,y) \right |)

    python实现:

    1. def SMD(img):
    2. '''
    3. :param img:narray 二维灰度图像
    4. :return: int 图像越清晰越大
    5. '''
    6. shape = np.shape(img)
    7. output = 0
    8. for x in range(1, shape[0]-1):
    9. for y in range(0, shape[1]):
    10. output+=math.fabs(int(img[x,y])-int(img[x,y-1]))
    11. output+=math.fabs(int(img[x,y]-int(img[x+1,y])))
    12. return output

    SMD2 (灰度方差乘积)函数

    SDM函数具有较好的计算性能,但其缺点也很明显,即在焦点附近灵敏度不高,即该函数在极值点附近过于平坦,从而导致聚焦精度难以提高。在《一种快速高灵敏度聚焦评价函数》中李郁峰等人在论文中提出了一种新的评价函数,称之为灰度方差乘积法,即对每一个像素领域两个灰度差相乘后再逐个像素累加,该函数定义如下:

                     D(f)=\sum_{y} \sum_{x}(\left |f(x,y)-f(x+1,y) \right |*\left |f(x,y)-f(x,y+1) \right |)

    python实现:

    1. def SMD2(img):
    2. '''
    3. :param img:narray 二维灰度图像
    4. :return: int 图像约清晰越大
    5. '''
    6. shape = np.shape(img)
    7. output = 0
    8. for x in range(0, shape[0]-1):
    9. for y in range(0, shape[1]-1):
    10. output+=math.fabs(int(img[x,y])-int(img[x+1,y]))*math.fabs(int(img[x,y]-int(img[x,y+1])))
    11. return output

    4、图像清晰度评价实现

    SWD2:

    1. import cv2
    2. import pyps.pyzjr.definition as din
    3. import pyps.pyzjr.utility as ult
    4. image=ult.read_resize_image("./compare/8881.jpg",space=True)
    5. img = din.SMD2(image)
    6. print(img)
    7. cv2.putText(image, f"definition:{img:.2f}", (10, 30),
    8. cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 3)
    9. cv2.imshow("definition_Image", image)
    10. cv2.waitKey(0)

    Brenner:

    Laplacian:

     

     5、总结与评价

    很遗憾,本次的清晰度评价失败了,如果想要得到一个边界值几乎不可能实现,哪怕通过大量图像数据(模糊图像与清晰图像)也不能完成,因为这些清晰度量化指标函数都是通过求图像像素的梯度,换汤不换药,在不同场景不同模糊的条件下很难去进行比对。

    参考资料:

    图像清晰度评价函数 - 知乎 (zhihu.com)

    模糊图像检测-无参考图像的清晰度评价 - 知乎 (zhihu.com)

    (2条消息) 无参考图像的清晰度评价方法_凌风探梅的博客-CSDN博客

    (2条消息) 图像处理:边缘检测原理_夏天是冰红茶的博客-CSDN博客

    (2条消息) 11种图像清晰度评价函数附MATLAB代码_姜饼8的博客-CSDN博客_能量梯度函数

    图像处理评价指标之模糊度、清晰度(待更新) - 知乎 (zhihu.com)

    一种快速高灵敏度聚焦评价函数 - 中国知网 (cnki.net)

  • 相关阅读:
    非对称密钥在ssh远程登陆Linux时的使用
    IIC的使用
    高速路标迎来“新面貌”
    B站视频“多模态大模型,科大讯飞前NLP专家串讲”记录
    为何在中国 Navicat 远比 DBeaver 流行
    Python爬虫——JsonPath解析方式
    通过「内网穿透」技术,实现出差期间远程访问企业局域网中的象过河ERP系统
    网络游戏协议:基于Protobuf的序列化与反序列化
    ansible学习
    YOLO目标检测——红外人员数据集【含对应voc、coco和yolo三种格式标签+划分脚本】
  • 原文地址:https://blog.csdn.net/m0_62919535/article/details/127818006
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号