NIQE计算

这个在github上可以找到源码:https://github.com/guptapraful/niqe

niqe的代码的主函数可以改动一下

import numpy as np
import scipy.misc
import scipy.io
from os.path import dirname
from os.path import join
import scipy
from PIL import Image
import numpy as np
import scipy.ndimage
import numpy as np
import scipy.special
import math
import os, random, shutil

gamma_range = np.arange(0.2, 10, 0.001)
a = scipy.special.gamma(2.0/gamma_range)
a *= a
b = scipy.special.gamma(1.0/gamma_range)
c = scipy.special.gamma(3.0/gamma_range)
prec_gammas = a/(b*c)

def aggd_features(imdata):
    #flatten imdata
    imdata.shape = (len(imdata.flat),)
    imdata2 = imdata*imdata
    left_data = imdata2[imdata<0]
    right_data = imdata2[imdata>=0]
    left_mean_sqrt = 0
    right_mean_sqrt = 0
    if len(left_data) > 0:
        left_mean_sqrt = np.sqrt(np.average(left_data))
    if len(right_data) > 0:
        right_mean_sqrt = np.sqrt(np.average(right_data))

    if right_mean_sqrt != 0:
      gamma_hat = left_mean_sqrt/right_mean_sqrt
    else:
      gamma_hat = np.inf
    #solve r-hat norm

    imdata2_mean = np.mean(imdata2)
    if imdata2_mean != 0:
      r_hat = (np.average(np.abs(imdata))**2) / (np.average(imdata2))
    else:
      r_hat = np.inf
    rhat_norm = r_hat * (((math.pow(gamma_hat, 3) + 1)*(gamma_hat + 1)) / math.pow(math.pow(gamma_hat, 2) + 1, 2))

    #solve alpha by guessing values that minimize ro
    pos = np.argmin((prec_gammas - rhat_norm)**2);
    alpha = gamma_range[pos]

    gam1 = scipy.special.gamma(1.0/alpha
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: NIQE全称是Natural Image Quality Evaluator,是一种用于图像质量评估的指标。NIQE计算需要用到Python语言编写的代码,下面简单介绍一下相关的计算代码。 首先需要安装NIQE的Python库,在终端中执行以下命令: ```python pip install niqe ``` 然后在Python中导入相应的库: ```python from niqe import niqe from skimage.io import imread ``` 其中,skimage是Python的一个图像处理库,用于读取图像数据。 接下来,读入需要评估的图像并将其转换为灰度图: ```python image = imread('image.jpg', as_gray=True) ``` 接着使用niqe函数进行NIQE指标的计算: ```python score = niqe(image) ``` 计算出来的score即为图像的NIQE指标评分。 需要注意的是,NIQE指标的计算依赖于其作者提供的模型,该模型需要包含在代码库中,否则计算会失败。同时,NIQE指标只能适用于自然图像,对于人工生成的图像效果不如其他评估指标。 ### 回答2: NIQE(Natural Image Quality Evaluator)是一种用于衡量图像质量的指标,用于评估图像的自然度、锐度、颜色饱和度和对比度等方面的品质,它是一种基于统计学方法的评价指标。 Python 语言提供了很多计算 NIQE 指标的工具包,其中比较常用的是 matlab2python 和 skimage 包。具体操作方法见下: 1. 导入需要使用的库 import numpy as np import skimage import skimage.color as color import skimage.io as io import skimage.data 2. 定义一个计算 NIQE 的函数 def NIQE(im): # Load a reference set of pristine natural images ref_imgs = skimage.io.imread_collection('refimgs/*.png') np.random.seed(0) ref_imgs_scaled = [] for img in ref_imgs: img = img / 255.0 img = skimage.img_as_float(color.rgb2gray(img)) img = skimage.transform.rescale(img, 0.25, mode='reflect', multichannel=False) ref_imgs_scaled.append(img) N = len(ref_imgs_scaled) mu_pris_ref_scaled, sigma_pris_ref_scaled = estimate_moments(ref_imgs_scaled) # Step 2 P = np.zeros(N) for i in range(N): P[i] = norm_pdf_estimation(im, mu_pris_ref_scaled[i], sigma_pris_ref_scaled[i]) # Step 3 gamma = estimate_gamma(im) # Step 4 alpha_est = estimate_alpha(im, gamma, P) # Step 5 NIQE_score = alpha_est * gamma return NIQE_score 3. 调用 NIQE 函数对图像进行计算 im = skimage.io.imread('test.png') im = skimage.img_as_float(im) NIQE_score = NIQE(im) print(NIQE_score) 以上就是计算 NIQE 指标的基本方法,需要注意的是不同的计算工具包所用的函数和参数可能有所不同,可以根据自己的需要进行调整。 ### 回答3: Niqe指标是一种用于评估图像质量的指标,它可以通过Python代码进行计算。 以下是一个示例代码,用于计算Niqe指标: ```python import cv2 import numpy as np import scipy.fftpack as fft def niqe(img): # 载入参考模板 ref = cv2.imread('niqe_model.png', cv2.IMREAD_GRAYSCALE) # 对图像进行预处理 img = np.float32(img) img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img = img / 255.0 # 计算DCT系数 dct_img = fft.dct(fft.dct(img, axis=0), axis=1) # 制作掩模 sigma_nsq = (0.1111)**2 mask = (np.abs(dct_img) > sigma_nsq) # 计算局部特征 mu = cv2.filter2D(img, -1, ref) mu_sq = mu ** 2 sigma = np.sqrt(cv2.filter2D(img ** 2, -1, ref) - mu_sq) # 应用掩模并取平均 masked_sigma = sigma[mask] niqe_val = np.mean(np.log(masked_sigma)) return niqe_val ``` 此代码使用了OpenCV、NumPy和SciPy库,其中包含了一些参数的默认值。在运行之前,需要确保参考模板“niqe_model.png”已经被正确载入。 要使用此代码计算图像的Niqe指标,只需要将图像传递给“niqe”函数即可。例如: ```python img = cv2.imread('image.jpg') niqe_val = niqe(img) print(niqe_val) ``` 这将输出图像的Niqe指标值。此代码可以用于评估各种类型的图像,但需要注意的是,Niqe指标并不一定是适用于所有图像质量评估任务的最佳选择,因此,需要根据具体情况选择最适合的指标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值