广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计

广义高斯分布(generalized Gaussian distribution,GGD)和非对称广义高斯分布( asymmetric generalized Gaussian distribution,AGGD)被经常使用与图像/视频信号的统计分析,其形状参数常被用为图像的特征进行分类或回归。如在图像质量评价任务中,Anish Mittal等人提出的BRISQUE模型利用GGD拟合归一化后图像(MSCN)的分布,利用GGD参数(α, σ ^2)作为一组特征;利用AGGD拟合图像四个方向上的MSCN的内积,每个方向利用AGGD参数(η, ν, σ_l ^2, σ_r ^2)作为另外四组特征。本文介绍BRISQUE采用的GGD和AGGD形状参数估计方法,并给出MATLAB、Python实现。

零均值广义高斯分布(GGD)的参数估计

广义高斯分布定义如下:
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第1张图片
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第2张图片

**GGD共有两个参数:参数α控制着分布的“形状”,即衰减的速度; σ控制着方差。**这两个参数的估计方法参考的是论文《Estimation of Shape Parameter for Generalized Gaussian Distributions in Subband Decompositions of Video》的方法。推导过程如下(注意里面的γ即为本文的形状参数α):
在这里插入图片描述
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第3张图片
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第4张图片
方法的核心是下面的比函数:
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第5张图片
1.首先计算均值和方差的估计值:
方差估计值即为需要估计的方差在这里插入图片描述
需要注意的是,对于零均值广义高斯分布,则ux=0,方差估计可简化为下式:
在这里插入图片描述
2.计算绝对值的修正平均值的估计值:
在这里插入图片描述
3.设R为ρ(α)的估计值,由式(4)得:
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第6张图片
4.根据 (4)式等式两端相等的原则,利用查找匹配的方法确定α。具体过程如下:
1)给出候选的α:设定α的查找区间,如[0.2:0.001:10]即α在(0.2,10)区间范围每隔0.001取值。
2)将所有α代入式(4)右边计算ρ(α)
3)计算所有ρ(α)与步骤3得出估计值R的距离,选取距离最小对应的α即为所求。

BRISQUE算法作者给出了零均值GGD参数估计的MATLAB代码(注意其中的γ即为形状参数(本文的α)):

function [gamparam sigma] = estimateggdparam(vec)
gam                              = 0.2:0.001:10;%给定候选的形状参数γ
r_gam                            = (gamma(1./gam).*gamma(3./gam))./((gamma(2./gam)).^2);%根据式(4)计算比值
sigma_sq                         = mean((vec).^2);%σ^2的零均值估计,非零均值需要计算均值然后按照(3)式
sigma                            = sqrt(sigma_sq);
E                                = mean(abs(vec));%计算步骤2
rho                              = sigma_sq/E^2;%计算步骤3的比值
[min_difference, array_position] = min(abs(rho - r_gam));
gamparam                         = gam(array_position);  

我进行了对应的Python实现:

import numpy as np
from scipy.special import gamma
def estimate_GGD_parameters(vec):
    gam =np.arange(0.2,10.0,0.001)#产生候选的γ
    r_gam = (gamma(1/gam)*gamma(3/gam))/((gamma(2/gam))**2)#根据候选的γ计算r(γ)
 	sigma_sq=np.mean((vec)**2)#σ^2的零均值估计,非零均值需要计算均值然后按照(3)式
    sigma=np.sqrt(sigma_sq)
    E=np.mean(np.abs(vec-u_vec))
    r=sigma_sq/(E**2)#根据sigma和E计算r(γ)
    diff=np.abs(r-r_gam)
    gamma_param=gam[np.argmin(diff, axis=0)]
    return sigma,gamma_param

非对称广义高斯分布(AGGD)的参数估计

AGGD的定义如下:
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第7张图片
其中:
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第8张图片
**AGGD共有三个参数,α、σ_l、σ_r。α控制着分布的“形状”,σ_l、σ_r分别控制左右两边的扩散程度。**AGGD参数的估计方法参考论文《MULTISCALE SKEWED HEAVY TAILED MODEL FOR TEXTURE ANALYSIS》的二阶估计法。推导过程如下:
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第9张图片
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第10张图片

方法的核心是以下的比:
在这里插入图片描述
1. 首先估计σ:
广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计_第11张图片
2. 计算γ估计量:
在这里插入图片描述
3.计算u的二阶估计和m的一阶估计,u、m的k阶估计如下:
在这里插入图片描述
然后根据(11)式左边估计r:
在这里插入图片描述
4. 设R为ρ(α)的估计量,则根据式(11):
在这里插入图片描述
5. 和GDD类似,利用查找匹配的方法确定α。具体过程如下:
1)给出候选的α:设定α的查找区间,如[0.2:0.001:10]即α在(0.2,10)区间范围每隔0.001取值。
2)将所有α代入下式计算ρ(α):
在这里插入图片描述
3)计算所得的ρ(α)与步骤3估计的R的距离,选取距离最小对应的α即为所求

BRISQUE算法作者给出了零均值AGGD参数估计的MATLAB代码(注意其中的γ即为形状参数(本文的α)):

function [alpha leftstd rightstd] = estimateaggdparam(vec)
gam   = 0.2:0.001:10;%给定候选的形状参数γ
r_gam = ((gamma(2./gam)).^2)./(gamma(1./gam).*gamma(3./gam));%步骤5.3计算所有可能的ρ(α)
leftstd            = sqrt(mean((vec(vec<0)).^2));%估计σ_l
rightstd           = sqrt(mean((vec(vec>0)).^2));
gammahat           = leftstd/rightstd;%步骤2
rhat               = (mean(abs(vec)))^2/mean((vec).^2);%步骤3
rhatnorm           = (rhat*(gammahat^3 +1)*(gammahat+1))/((gammahat^2 +1)^2);%步骤4
[min_difference, array_position] = min((r_gam - rhatnorm).^2);
alpha              = gam(array_position);

我进行了对应了Python实现:

def estimate_AGGD_parameters(vec):
    alpha =np.arange(0.2,10.0,0.001)#产生候选的α
    r_alpha=((gamma(2/alpha))**2)/(gamma(1/alpha)*gamma(3/alpha))#根据候选的α计算r(α)
    sigma_l=np.sqrt(np.mean(vec[vec<0]**2))#估计σ_l
    sigma_r=np.sqrt(np.mean(vec[vec>0]**2))
    gamma_=sigma_l/sigma_r#步骤2
    #步骤3
    u2=np.mean(vec**2)
    m1=np.mean(np.abs(vec))
    r_=m1**2/u2
    R_=r_*(gamma_**3+1)*(gamma_+1)/((gamma_**2+1)**2)#步骤4
    diff=(R_-r_alpha)**2
    alpha_param=alpha[np.argmin(diff, axis=0)]
    return sigma_l,sigma_r,alpha_param

参考文献:
[1]Mittal A , Moorthy A K , Bovik A C . No-Reference Image Quality Assessment in the Spatial Domain[J]. IEEE Transactions on Image Processing A Publication of the IEEE Signal Processing Society, 2012, 21(12):4695.
[2]Sharifi K , Leon-Garcia A . Estimation of shape parameter for generalized Gaussian distribution in subband decomposition of video[J]. IEEE Transactions on Circuits and Systems for Video Technology, 1995, 5(1):52-56.
[3]Lasmar N E , Stitou Y , Berthoumieu Y . Multiscale skewed heavy tailed model for texture analysis[C]// IEEE International Conference on Image Processing. IEEE, 2010.

你可能感兴趣的:(Image/Video,Quality,Assessment)