图像质量评价-2

图像质量评价

  • 无参考
  • 有参考

无参考图像质量评价

1、Laplacian梯度
D ( f ) = Σ y Σ x ∣ G ( x , y ) ∣ D(f) = \Sigma _y \Sigma_x |G(x,y)| D(f)=ΣyΣxG(x,y)
G ( x , y ) G(x,y) G(x,y)是点 ( x , y ) (x,y) (x,y)处Laplacian算子的卷积。

Laplacian算子,
L = 1 6 × [ 1 4 1 4 − 20 4 1 4 1 ] L = \frac 1 6 × \begin{bmatrix} 1&4&1 \\ 4&-20&4 \\ 1&4&1\end{bmatrix} L=61×1414204141

# 1、Laplacian梯度
def laplacian(img):
    grad = cv2.Laplacian(img, cv2.CV_64F).var()
    return grad

2、Brenner梯度
D ( f ) = Σ y Σ x ∣ f ( x + 2 , y ) − f ( x , y ) ∣ 2 D(f) = \Sigma _y \Sigma_x |f(x+2,y) - f(x,y)|^2 D(f)=ΣyΣxf(x+2,y)f(x,y)2

# 2、Brenner梯度
def brenner(img):
    h, w = img.shape
    grad = 0
    for i in range(w - 2):
        for j in range(h):
            grad += (int(img[i + 2, j]) - int(img[i, j])) ** 2
    return grad

3、Tenengrad梯度
D ( f ) = Σ y Σ x ∣ G ( x , y ) ∣ D(f) = \Sigma _y \Sigma_x |G(x,y)| D(f)=ΣyΣxG(x,y)
G ( x , y ) G(x,y) G(x,y)是点 ( x , y ) (x,y) (x,y)处Sobel算子水平方向和垂直方向梯度的向量。
G ( x , y ) = G x 2 ( x , y ) + G y 2 ( x , y ) G(x,y) = \sqrt {G_x^2 (x,y) + G_y^2 (x,y)} G(x,y)=Gx2(x,y)+Gy2(x,y)
G x ( x , y ) G_x(x,y) Gx(x,y) G y ( x , y ) G_y(x,y) Gy(x,y)是点 ( x , y ) (x,y) (x,y)处Sobel算子水平方向和垂直方向梯度。

# 3、Tenengrad梯度
def tenengrad(img):
    h, w = img.shape
    grad = 0
    for i in range(w):
        for j in range(h):
            gradX = cv2.Sobel(img, cv2.CV_64F, 1, 0)
            gradY = cv2.Sobel(img, cv2.CV_64F, 0, 1)
            grad += np.sqrt(gradX ** 2 + gradY ** 2)
    return grad

4、Energy梯度
D ( f ) = Σ y Σ x ( ∣ f ( x + 1 , y ) − f ( x , y ) ∣ 2 + ∣ f ( x , y + 1 ) − f ( x , y ) ∣ 2 ) D(f) = \Sigma _y \Sigma_x ( |f(x+1,y) - f(x,y)|^2 + |f(x,y+1) - f(x,y)|^2 ) D(f)=ΣyΣx(f(x+1,y)f(x,y)2+f(x,y+1)f(x,y)2)

# 4、Energy梯度
def energy(img):
    h, w = img.shape
    grad = 0
    for i in range(w):
        for j in range(h):
            gradX = (int(img[i + 1, j]) - int(img[i, j])) ** 2
            gradY = (int(img[i, j + 1]) - int(img[i, j])) ** 2
            grad += (gradX + gradY)
    return grad

5、Roberts梯度
D ( f ) = Σ y Σ x ( ∣ f ( x + 1 , y + 1 ) − f ( x , y ) ∣ 2 + ∣ f ( x + 1 , y ) − f ( x , y + 1 ) ∣ 2 ) D(f) = \Sigma _y \Sigma_x ( |f(x+1,y+1) - f(x,y)|^2 + |f(x+1,y) - f(x,y+1)|^2 ) D(f)=ΣyΣx(f(x+1,y+1)f(x,y)2+f(x+1,y)f(x,y+1)2)

# 5、Roberts梯度
def roberts(img):
    h, w = img.shape
    grad = 0
    for i in range(w):
        for j in range(h):
            gradX = (int(img[i + 1, j + 1]) - int(img[i, j])) ** 2
            gradY = (int(img[i + 1, j]) - int(img[i, j + 1])) ** 2
            grad += (gradX + gradY)
    return grad

6、SMD
D ( f ) = Σ y Σ x ( ∣ f ( x , y ) − f ( x , y − 1 ) ∣ + ∣ f ( x , y ) − f ( x + 1 , y ) ∣ ) D(f) = \Sigma _y \Sigma_x ( |f(x,y) - f(x,y-1)| + |f(x,y) - f(x+1,y)| ) D(f)=ΣyΣx(f(x,y)f(x,y1)+f(x,y)f(x+1,y))

# 6、SMD函数
def SMD(img):
    h, w = img.shape
    grad = 0
    for i in range(w - 1):
        for j in range(1, h):
            gradX = abs(int(img[i, j]) - int(img[i + 1, j]))
            gradY = abs(int(img[i, j]) - int(img[i, j - 1]))
            grad += (gradX + gradY)
    return grad

7、SMD2
D ( f ) = Σ y Σ x ( ∣ f ( x , y ) − f ( x + 1 , y ) ∣ ∗ ∣ f ( x , y ) − f ( x , y + 1 ) ∣ ) D(f) = \Sigma _y \Sigma_x ( |f(x,y) - f(x+1,y)|* |f(x,y) - f(x,y+1)| ) D(f)=ΣyΣx(f(x,y)f(x+1,y)f(x,y)f(x,y+1))

# 7、SMD2函数
def SMD2(img):
    h, w = img.shape
    grad = 0
    for i in range(w - 1):
        for j in range(h - 1):
            gradX = abs(int(img[i, j]) - int(img[i + 1, j]))
            gradY = abs(int(img[i, j]) - int(img[i, j + 1]))
            grad += (gradX * gradY)
    return grad

8、方差
D ( f ) = Σ y Σ x ∣ f ( x , y ) − μ ∣ 2 D(f) = \Sigma _y \Sigma_x |f(x,y) - \mu|^2 D(f)=ΣyΣxf(x,y)μ2
μ \mu μ是整个图像像素值的均值。

# 8、方差函数
def variance(img):
    h, w = img.shape
    m = np.mean(img)
    grad = 0
    for i in range(w):
        for j in range(h):
            grad += (img[i, j] - m) ** 2
    return grad
# 这种方法也可以,速度更快
np.var(img)

9、Vollath自相关
D ( f ) = Σ y Σ x ( f ( x , y ) ∗ f ( x + 1 , y ) − H ∗ W ∗ μ 2 ) D(f) = \Sigma _y \Sigma_x ( f(x,y) * f(x+1,y) - H*W* \mu ^2) D(f)=ΣyΣx(f(x,y)f(x+1,y)HWμ2)
H H H W W W分别是图像的高和宽。

# 9、Vollath自相关函数
def vollath(img):
    h, w = img.shape
    m = np.mean(img)
    gradMean = (w + 1) * h * m ** 2
    grad = 0
    for i in range(w - 1):
        for j in range(h):
            grad += img[i, j] * img[i + 1, j]
    return grad - gradMean

10、熵
D ( f ) = − ∑ i = 0 L − 1 p i ∗ l o g 2 ( p i ) D(f) = - \sum ^{L-1}_{i=0} p_i *log_2(p_i) D(f)=i=0L1pilog2(pi)
L = 256 L=256 L=256,表示图像的像素值, p i p_i pi是图像像素值 i i i出现的概率。

# 10、熵函数
def entropy(img):
    h, w = img.shape
    grad = 0
    p = np.bincount(np.array(img).flatten())  # img中每个像素值出现的次数
    for i in range(len(p)):
        if p[i] > 0:
            pi = (p[i] / (w * h))
            grad -= pi * np.log2(pi)
    return grad
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吕同学吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值