请选择 进入手机版 | 继续访问电脑版

石家庄老站长

点击联系客服
客服QQ:509006671 客服微信:mengfeiseo
 找回密码
 立即注册
查看: 20|回复: 0

[图像评价] MATLAB非参考NIQE图像质量评价[包括MATLAB源681期]

[复制链接]

1

主题

1

帖子

-7

积分

限制会员

积分
-7
发表于 2021-4-4 14:39:15 | 显示全部楼层 |阅读模式
一、简介

新型号称为国家图像质量计算器(NIQE)。该模型用于构建一系列测量图像质量的功能,并拟合从简单、高度规则的自然景观中提取的各种高斯模型。该模型实际上测量了从一系列正常自然图像中提取的这些特征组成的多分布测试对象图像之间的差异。

1构建模型

空间域的特征(称为Spatial  Domain  NSS)

首先从图像中提取其中一个面片,然后执行以下规范化之一,计算如下





其中 \mu 是高斯加权,初始设计中高斯加权是3x3模板。从上面的公式来看,毫无疑问,以高斯平均值和高斯标准差为基准的上述规范化计算与其他指标相比,NIQE只是正常自然图像中的这个指标,不正常的图像有多少,在这个指标上与正常图像的计算值会有差异。理论上,NSS可以应用于多种图像退化。(威廉莎士比亚,《Northern  Exposure》(美国电视剧),《北方执行》(Northern  Exposure))。

补缀选取(patch  selection)

如果需要计算上面的NSS指标,毫无疑问图像可以分为一个patch。NIQE的算法设计中,只有部分patch有用,其中包括patch的选择问题。例如,如果将焦点放在分辨率下降的图像上,则可以选择sharp的局部边缘来判断分辨率是否损坏,而不必一次性观察整个图像的所有patch。这里定义了局部变形系数





其中,变形系数设置在作者实验中设置为0.75的阈值。大于0.75的patch可用于以下计算:这个阶段的操作很容易理解。毕竟,变形系数越大的patch,内容越复杂,其中包含的信息就越多。其中\ sigmar是上述步骤中介绍的\ sigmar;

补丁程序说明

前面的内容介绍了patch的空间域特性以及如何选择patch。现在的问题是如何设计指标来描述我们选择的patch。这个描述是参考高斯分布思想的指标。首先定义高斯分布类型的指标GGD。
_16,color_FFFFFF,t_70" alt="在这里插入图片描述" />





二、源代码
function  [mu_prisparam cov_prisparam]  = estimatemodelparam(folderpath,...
    blocksizerow,blocksizecol,blockrowoverlap,blockcoloverlap,sh_th)
   
% Input
% folderpath      - Folder containing the pristine images
% blocksizerow    - Height of the blocks in to which image is divided
% blocksizecol    - Width of the blocks in to which image is divided
% blockrowoverlap - Amount of vertical overlap between blocks
% blockcoloverlap - Amount of horizontal overlap between blocks
% sh_th           - The sharpness threshold level
%Output
%mu_prisparam  - mean of multivariate Gaussian model
%cov_prisparam - covariance of multivariate Gaussian model
% Example call
%[mu_prisparam cov_prisparam] = estimatemodelparam('pristine',96,96,0,0,0.75);
%----------------------------------------------------------------
% Find the names of images in the folder
current = pwd;
cd(sprintf('%s',folderpath))
names        = ls;
names        = names(3:end,:);%
cd(current)
% ---------------------------------------------------------------
%Number of features
% 18 features at each scale
featnum      = 18;
% ---------------------------------------------------------------
% Make the directory for storing the features
mkdir(sprintf('local_risquee_prisfeatures'))
% ---------------------------------------------------------------
% Compute pristine image features
for itr = 1:size(names,1)
itr
im               = imread(sprintf('%s\\%s',folderpath,names(itr,:)));
if(size(im,3)==3)
im               = rgb2gray(im);
end
im               = double(im);            
[row col]        = size(im);
block_rownum     = floor(row/blocksizerow);
block_colnum     = floor(col/blocksizecol);
im               = im(1:block_rownum*blocksizerow, ...
                   1:block_colnum*blocksizecol);               
window           = fspecial('gaussian',7,7/6);
window           = window/sum(sum(window));
scalenum         = 2;
warning('off')
feat = [];
for itr_scale = 1:scalenum
   
mu                       = imfilter(im,window,'replicate');
mu_sq                    = mu.*mu;
sigma                    = sqrt(abs(imfilter(im.*im,window,'replicate') - mu_sq));
structdis                = (im-mu)./(sigma+1);
              
               
               
feat_scale               = blkproc(structdis,[blocksizerow/itr_scale blocksizecol/itr_scale], ...
                           [blockrowoverlap/itr_scale blockcoloverlap/itr_scale], ...
                           @computefeature);
feat_scale               = reshape(feat_scale,[featnum ....
                           size(feat_scale,1)*size(feat_scale,2)/featnum]);
feat_scale               = feat_scale';
if(itr_scale == 1)
sharpness                = blkproc(sigma,[blocksizerow blocksizecol], ...
                           [blockrowoverlap blockcoloverlap],@computemean);
sharpness                = sharpness(:);
end
feat                     = [feat feat_scale];
im =imresize(im,0.5);
end
function  quality = computequality(im,blocksizerow,blocksizecol,...
    blockrowoverlap,blockcoloverlap,mu_prisparam,cov_prisparam)
   
% Input1
% im              - Image whose quality needs to be computed
% blocksizerow    - Height of the blocks in to which image is divided
% blocksizecol    - Width of the blocks in to which image is divided
% blockrowoverlap - Amount of vertical overlap between blocks
% blockcoloverlap - Amount of horizontal overlap between blocks
% mu_prisparam    - mean of multivariate Gaussian model
% cov_prisparam   - covariance of multivariate Gaussian model
% For good performance, it is advisable to use make the multivariate Gaussian model
% using same size patches as the distorted image is divided in to
% Output
%quality      - Quality of the input distorted image
% Example call
%quality = computequality(im,96,96,0,0,mu_prisparam,cov_prisparam)
% ---------------------------------------------------------------
%Number of features
% 18 features at each scale
featnum      = 18;
%----------------------------------------------------------------
%Compute features
if(size(im,3)==3)
im               = rgb2gray(im);
end
im               = double(im);               
[row col]        = size(im);
block_rownum     = floor(row/blocksizerow);
block_colnum     = floor(col/blocksizecol);
im               = im(1:block_rownum*blocksizerow,1:block_colnum*blocksizecol);              
[row col]        = size(im);
block_rownum     = floor(row/blocksizerow);
block_colnum     = floor(col/blocksizecol);
im               = im(1:block_rownum*blocksizerow, ...
                   1:block_colnum*blocksizecol);               
window           = fspecial('gaussian',7,7/6);
window           = window/sum(sum(window));
scalenum         = 2;
warning('off')
feat             = [];

三、运行结果


四、备注
完整代码或者代写添加QQ 1564658423
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|无图版|手机版|小黑屋|石家庄@IT精英团

GMT+8, 2021-5-10 15:03 , Processed in 0.102183 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2021 Comsenz Inc.

快速回复 返回顶部 返回列表