使用NIQE对图像进行评价的python代码
时间: 2024-05-06 12:18:31 浏览: 197
NIQE(Natural Image Quality Evaluator)是一种用于自然图像质量评估的算法。下面是使用Python实现NIQE算法的代码:
```python
import numpy as np
import scipy.io as sio
from scipy import ndimage
from scipy.signal import convolve2d
def niqe(img):
# Load model parameters
model = sio.loadmat('niqe_model.mat')
mu_prisparam = model['mu_prisparam']
cov_prisparam = model['cov_prisparam']
coef = model['coef']
q = model['q']
mu_prisparam = np.squeeze(mu_prisparam)
cov_prisparam = np.squeeze(cov_prisparam)
coef = np.squeeze(coef)
q = np.squeeze(q)
def im2col_sliding_strided(A, BSZ, stepsize=1):
m, n = A.shape
s0, s1 = A.strides
nrows = m - BSZ[0] + 1
ncols = n - BSZ[1] + 1
shp = BSZ[0], BSZ[1], nrows, ncols
strd = s0, s1, s0, s1
out_view = np.lib.stride_tricks.as_strided(A, shape=shp, strides=strd)
return out_view.reshape(BSZ[0] * BSZ[1], -1)[:, ::stepsize]
# Convert image to grayscale
if len(img.shape) == 3:
img = np.dot(img[..., :3], [0.2989, 0.5870, 0.1140])
# Normalize image
img = (img - np.mean(img)) / np.std(img)
# Compute local contrast normalization
window = np.ones((7, 7)) / 49
mu = convolve2d(img, window, mode='same', boundary='symm')
mu_sq = mu * mu
sigma = np.sqrt(np.abs(convolve2d(img * img, window, mode='same', boundary='symm') - mu_sq))
structdis = (img - mu) / (1 + sigma)
# Compute block-wise DCT coefficients
dct_blocks = []
for i in range(0, img.shape[0] - 7 + 1, 4):
for j in range(0, img.shape[1] - 7 + 1, 4):
block = img[i:i+8, j:j+8]
dct_block = ndimage.fourier.fctn(block, norm='ortho')
dct_blocks.append(dct_block)
# Compute features
features = []
for i in range(len(dct_blocks)):
dct_block = dct_blocks[i]
mu_dct = np.mean(dct_block)
sigma_dct = np.std(dct_block)
features.append(mu_dct)
features.append(sigma_dct)
features.append(np.abs(dct_block[0, 1]))
features.append(np.abs(dct_block[1, 0]))
features.append(np.mean(np.abs(dct_block[2:, 2:])))
features.append(np.mean(np.abs(dct_block[3:, 3:])))
features.append(np.mean(np.abs(dct_block[4:, 4:])))
features.append(np.mean(np.abs(dct_block[5:, 5:])))
# Compute feature vector
features = np.array(features)
features_norm = (features - mu_prisparam) / np.sqrt(cov_prisparam)
# Compute quality score
quality_score = np.dot(coef, np.tanh(np.dot(q, features_norm)))
return quality_score
```
使用方法:
```python
import cv2
# Load image
img = cv2.imread('image.jpg')
# Compute NIQE score
niqe_score = niqe(img)
print('NIQE score:', niqe_score)
```
注意,该代码需要依赖`numpy`、`scipy`和`opencv-python`库。在运行代码前需要先下载NIQE模型文件`niqe_model.mat`,并将其与代码放在同一目录下。
阅读全文
相关推荐
















