美文网首页
清晰度检测与增强算法

清晰度检测与增强算法

作者: Byte猫 | 来源:发表于2019-05-21 17:02 被阅读0次

一、清晰度检测

在无参考图像的质量评价中,图像的清晰度是衡量图像质量优劣的重要指标,它能够较好的与人的主观感受相对应,图像的清晰度不高表现出图像的模糊。

1、Brenner 梯度函数

Brenner梯度函数是最简单的梯度评价函数,它只是简单的计算相邻两个像素灰度差的平方.


import cv2 as cv
import numpy as np
import math

def brenner(img):
    '''
    Brenner梯度函数
    INPUT -> 二维灰度图像
    OUTPUT -> 图像越清晰越大
    '''
    shape = np.shape(img)
    out = 0
    for y in range(0, shape[0]):
        for x in range(0, shape[1]-2):
            out+=(int(img[x+2,y])-int(img[x,y]))**2
    return out

2、Laplacian梯度函数

对每一个像素点计算该处Laplacian算子的卷积后再逐个像素累加。


G(x,y)是像素点(x,y)处Laplacian算子的卷积

Laplacian算子定义如下


def Laplacian(img):
    '''
    Laplacian梯度函数
    INPUT -> 二维灰度图像
    OUTPUT -> 图像越清晰越大
    '''
    return cv.Laplacian(img, cv.CV_64F).var()

3、SMD(灰度差分)函数

对每一个像素邻域两个灰度差相加后再逐个像素累加。


def SMD(img):
    '''
    SMD函数
    INPUT -> 二维灰度图像
    OUTPUT -> 图像越清晰越大
    '''
    shape = np.shape(img)
    out = 0
    for y in range(1, shape[0]):
        for x in range(0, shape[1]-1):
            out+=math.fabs(int(img[x,y])-int(img[x,y-1]))
            out+=math.fabs(int(img[x,y]-int(img[x+1,y])))
    return out

4、SMD2(灰度差分乘积)函数

对每一个像素邻域两个灰度差相乘后再逐个像素累加。


def SMD2(img):
    '''
    SMD2函数
    INPUT -> 二维灰度图像
    OUTPUT -> 图像越清晰越大
    '''
    shape = np.shape(img)
    out = 0
    for y in range(0, shape[0]-1):
        for x in range(0, shape[1]-1):
            out+=math.fabs(int(img[x,y])-int(img[x+1,y]))*math.fabs(int(img[x,y]-int(img[x,y+1])))
    return out

5、方差函数

因为清晰聚焦的图像有着比模糊图像更大的灰度差异,可以将方差函数作为评价函数。


μ为整幅图像的平均灰度值,该函数对噪声比较敏感,图像画面越纯净,函数值越小
def variance(img):
    '''
    variance函数
    INPUT -> 二维灰度图像
    OUTPUT -> 图像越清晰越大
    '''
    out = 0
    u = np.mean(img)
    shape = np.shape(img)
    for y in range(0,shape[0]):
        for x in range(0,shape[1]):
            out+=(img[x,y]-u)**2
    return out

6、能量梯度函数

能量梯度函数更适合实时评价图像清晰度


def energy(img):
    '''
    energy函数
    INPUT -> 二维灰度图像
    OUTPUT -> 图像越清晰越大
    '''
    shape = np.shape(img)
    out = 0
    for y in range(0, shape[0]-1):
        for x in range(0, shape[1]-1):
            out+=((int(img[x+1,y])-int(img[x,y]))**2)*((int(img[x,y+1]-int(img[x,y])))**2)
    return out

7、Vollath函数

μ为整幅图像的平均灰度值,M和N分别为图像宽和高
def Vollath(img):
    '''
    Vollath函数
    INPUT -> 二维灰度图像
    OUTPUT -> 图像越清晰越大
    '''
    shape = np.shape(img)
    u = np.mean(img)
    out = -shape[0]*shape[1]*(u**2)
    for y in range(0, shape[0]):
        for x in range(0, shape[1]-1):
            out+=int(img[x,y])*int(img[x+1,y])
    return out

8、熵函数

基于统计特征的熵函数是衡量图像信息丰富程度的一个重要指标,有信息论可知,一幅图像 f 的信息量是由该图像的信息熵 D(f) 来度量.


Pi 是图像中灰度值为i的像素出现的概率,L为灰度级总数(通常取值256)

根据Shannon信息论,熵最大时信息量最多。将此原理应用到对焦过程,D(f)越大则图像越清晰。熵函数灵敏度不高,依据图像内容不同容易出现与真实情况相反的结果。

def entropy(img):
    '''
    entropy函数
    INPUT -> 二维灰度图像
    OUTPUT -> 图像越清晰越大
    '''
    out = 0
    count = np.shape(img)[0]*np.shape(img)[1]
    p = np.bincount(np.array(img).flatten())
    for i in range(0, len(p)):
        if p[i]!=0:
            out-=p[i]*math.log(p[i]/count)/count
    return out

拓展

二、清晰度增强

增强图像清晰度的技术一般被称为超分辨率技术,常见的有基于临近像素点计算的方法、基于图像成像原理的方法、基于贴片的方法以及基于深度神经网络的方法。
目前效果最好的是基于深度神经网络的方法:
谷歌超分辨率技术RAISR
腾讯超分辨率技术TSR

相关文章

  • 清晰度检测与增强算法

    一、清晰度检测 在无参考图像的质量评价中,图像的清晰度是衡量图像质量优劣的重要指标,它能够较好的与人的主观感受相对...

  • 对比度检测与增强算法

    一、对比度检测 对比度通俗地讲就是亮暗的拉伸对比程度,指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的...

  • 计算机视觉 OpenCV Android | 特征检测与匹配之角

    本文要点总结(俩算法的联系与区别) Harris角点检测与Shi-Tomasi角点检测都是经典的角点特征提取算法,...

  • 六.图像增强

    空域平滑 图像锐化 彩色增强技术 频域增强 增强的目的: 改善图像视觉效果,提高清晰度:平滑、降噪——图像清晰 利...

  • 音频基础

    音频开发的具体内容有:(1)音频采集/播放(2)音频算法处理(去噪、静音检测、回声消除、音效处理、功放/增强、混音...

  • C++对C增强部分

    全局变量检测增强int a;int a = 10;C++ 不可以,C可以 函数检测增强函数参数类型增强,C++ 必...

  • 增强算法

    adaboost自提升 随机森林RFimage.pngimage.png

  • 一棵松树与意志力

    【身心苏醒教室】 又坐到了相同的地方——公园一角。意识的稳定度与清晰度与上次坐在这里不同,两者都增强了,内心的...

  • 多边形碰撞检测(分离轴算法Lua实现)

    在游戏开发中,我们一般常用的碰撞检测算法有AABB,OBB以及分离轴算法。AABB与OBB一般用于矩形的碰撞检测,...

  • 机器学习学习笔记--朴素贝叶斯实践

    朴素贝叶斯算法是应用最为广泛的分类算法之一。简称NB算法。可以用来检测异常操作,检测DGA域名,检测针对Apach...

网友评论

      本文标题:清晰度检测与增强算法

      本文链接:https://www.haomeiwen.com/subject/kfpeaqtx.html