基于NIQE算法的图像无参考质量评价算法matlab仿真

31 阅读3分钟

1.算法运行效果图预览

 

2f89a6ee01e55fe09b75eacdc56cb87d_82780907_202402132215190139397978_Expires=1707834319&Signature=BsOrncqyJfgvanWi%2FQm85%2Fp2stA%3D&domain=8.jpeg

7484e62d905ce94c654037fafc110858_82780907_202402132215190201151849_Expires=1707834319&Signature=Ud4Wt8IzfpOm9Tlc4uFHUn8z6GY%3D&domain=8.jpeg  

2.算法运行软件版本

MATLAB2022a

 

 

3.算法理论概述

       NIQE(Naturalness Image Quality Evaluator)算法是一种无参考图像质量评价算法,旨在评估图像的自然度,即图像看起来是否像自然场景。 NIQE基于一组“质量感知”特征,并将其拟合到MVG模型中。质量感知特征源于一个简单但高度正则化的NSS模型。然后,将给定的测试图像的NIQE指标表示为从测试图像中提取的NSS特征的MVG模型与从自然图像语料中提取的质量感知特征的MVG模型之间的距离。整个过程由五步操作完成:

 

3.1 空域NSS特征提取

6e2454b95ee8787f34ccc5bb2f7ee04d_82780907_202402132214020794204708_Expires=1707834242&Signature=NKjovcOYcL5Z5Ho1QWIiPmcalrA%3D&domain=8.png

3.2 图像块选取

 

       一旦图像的系数由(1)式计算出,整张图像会被分割成P × P P\times{P}P×P的块。然后从每个块的系数中计算出特殊的NSS特征。方差(3)在之前的基于NSS的图片分析中常常被忽视。但是它在结构化图片信息上有丰富的内容。这些内容可以被用来量化局部图片的锐利度。(从美学上认为一幅图片越锐利它的成像效果会越好,平滑模糊代表一种视觉信息的潜在损失。)将P × P P\times{P}P×P的图像块用b = 1 , 2 , . . . , B b=1,2,...,Bb=1,2,...,B做标记,再用一种直接的方法计算每一块b bb平均局部偏移范围:

e805bb5323492523bae518375d852df5_82780907_202402132213520451300576_Expires=1707834232&Signature=ZYKh%2Fyv4p6r5bwdelVi8j%2ByD6b8%3D&domain=8.png  

3.3 MVG模型

       通过将自然图像块与MVG模型密度函数拟合,可以得到一个简单的NSS特征模型,MVG模型密度函数为:

983685b1cf6dde719a67741a829b279f_82780907_202402132212380668437017_Expires=1707834158&Signature=pwM%2BiMux54vdfNIN8OVkleBAarg%3D&domain=8.png

 

3.4 NIQE指标

        NIQE分数的计算,是通过计算待测图片MVG模型参数和上面得到的自然图片MVG模型参数的距离来得到(如下式)。不过选择patch的准则(1)不应用到待测图片上,而只用在上面自然图片模型参数估计上。原因如下:

 

af2b16536018b28dc0505f731eeffeb4_82780907_202402132212270933848764_Expires=1707834147&Signature=agwkykmHoIneDdjzPDMjw9FVtsc%3D&domain=8.png

 

4.部分核心程序 `clc;

clear;

close all;

warning off;

addpath(genpath(pwd));

rng('default')

 

Rbk     = 48;

Cbk     = 48;

Rlap    = 0;

Clap    = 0;

%加入不同的噪声,估计图像质量

im1     = imread('1.bmp');

quality1= func_quality(im1,Rbk,Cbk,Rlap,Clap);

 

im2     = imnoise(im1,'salt & pepper',0.001); %加入不同的噪声,估计图像质量

quality2= func_quality(im2,Rbk,Cbk,Rlap,Clap);

 

 

im3     = imnoise(im1,'salt & pepper',0.01); %加入不同的噪声,估计图像质量

quality3= func_quality(im3,Rbk,Cbk,Rlap,Clap);

 

im4     = imnoise(im1,'salt & pepper',0.05); %加入不同的噪声,估计图像质量

quality4= func_quality(im4,Rbk,Cbk,Rlap,Clap);

 

im5     = imnoise(im1,'salt & pepper',0.1); %加入不同的噪声,估计图像质量

quality5= func_quality(im5,Rbk,Cbk,Rlap,Clap);

 

im6     = imnoise(im1,'salt & pepper',0.25); %加入不同的噪声,估计图像质量

quality6= func_quality(im6,Rbk,Cbk,Rlap,Clap);

 

 

figure;

subplot(231);

imshow(im1);

title(['质量估计值:',num2str(100/quality1)]);

 

subplot(232);

imshow(im2);

title(['质量估计值:',num2str(100/quality2)]);

 

subplot(233);

imshow(im3);

title(['质量估计值:',num2str(100/quality3)]);

 

subplot(234);

imshow(im4);

title(['质量估计值:',num2str(100/quality4)]);

 

subplot(235);

imshow(im5);

title(['质量估计值:',num2str(100/quality5)]);

 

subplot(236);

imshow(im6);

title(['质量估计值:',num2str(100/quality6)]);`