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

2023-12-27 09:58

本文主要是介绍广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 引言

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

f ( x ; α , σ 2 ) = α 2 β Γ ( 1 / α ) exp ⁡ ( − ( ∣ x ∣ β ) α ) f\left(x ; \alpha, \sigma^{2}\right)=\frac{\alpha}{2 \beta \Gamma(1 / \alpha)} \exp \left(-\left(\frac{|x|}{\beta}\right)^{\alpha}\right) f(x;α,σ2)=2βΓ(1/α)αexp((βx)α)
where
β = σ Γ ( 1 / α ) Γ ( 3 / α ) \beta=\sigma \sqrt{\frac{\Gamma(1 / \alpha)}{\Gamma(3 / \alpha)}} β=σΓ(3/α)Γ(1/α)
and Γ ( ⋅ ) \Gamma(\cdot) Γ() is the gamma function:
Γ ( a ) = ∫ 0 ∞ t a − 1 e − t d t a > 0 \Gamma(a)=\int_{0}^{\infty} t^{a-1} e^{-t} d t \quad a>0 Γ(a)=0ta1etdta>0

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

广义高斯分布定义如下:
相同方差不同形状参数的GGD

  GGD共有两个参数:参数 α α α控制着分布的“形状”,即衰减的速度; σ σ σ控制着方差(标准差)。这两个参数的估计方法参考的是论文《Estimation of Shape Parameter for Generalized Gaussian Distributions in Subband Decompositions of Video》的方法。推导过程如下(注意里面的 γ γ γ即为本文的形状参数 α α α):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我的数学功底不强,所以我只能对照和论文理解个大概。欢迎大佬们在评论区指正!
方法的核心是下面的比函数:

ρ ( α ) = σ X 2 E 2 [ ∣ X ∣ ] = Γ ( 1 α ) ⋅ Γ ( 3 α ) Γ 2 ( 2 α ) \rho(\alpha)=\frac{\sigma_{X}^{2}}{E^{2}[|X|]}=\frac{\Gamma\left(\frac{1}{\alpha}\right) \cdot \Gamma\left(\frac{3}{\alpha}\right)}{\Gamma^{2}\left(\frac{2}{\alpha}\right)} ρ(α)=E2[X]σX2=Γ2(α2)Γ(α1)Γ(α3)
1.首先计算均值和方差的估计值:
方差估计值即为需要估计的方差 μ ^ X = 1 M ∑ i = 1 11 x i , σ ^ N 2 = 1 M ∑ i = 1 M ( x i − μ ^ N ) 2 \hat{\mu}_{X}=\frac{1}{M} \sum_{i=1}^{11} x_{i}, \quad \hat{\sigma}_{N}^{2}=\frac{1}{M} \sum_{i=1}^{M}\left(x_{i}-\hat{\mu}_{N}\right)^{2} μ^X=M1i=111xi,σ^N2=M1i=1M(xiμ^N)2

需要注意的是,对于零均值广义高斯分布,则 μ ^ X = 0 \hat{\mu}_{X}=0 μ^X=0,方差估计可简化为下式:
σ X 2 ^ = 1 M ∑ i = 1 M x i 2 \widehat{\sigma_{X}^{2}}=\frac{1}{M} \sum_{i=1}^{M} x_{i}^{2} σX2 =M1i=1Mxi2

2.计算绝对值的修正平均值的估计值:
E ^ [ ∣ X ∣ ] = ( 1 / M ) ∑ i = 1 M ∣ x i − μ ^ X ∣ \hat{E}[|X|]=(1 / M) \sum_{i=1}^{M}\left|x_{i}-\hat{\mu}_{X}\right| E^[X]=(1/M)i=1Mxiμ^X

3.设 R ^ \hat{R} R^ ρ ( α ) ρ(α) ρ(α)的估计值,由式(4)得:
R ^ = σ X 2 E 2 [ ∣ X ∣ ] \widehat{\mathrm{R}}=\frac{\sigma_{X}^{2}}{E^{2}[|X|]} R =E2[X]σX2

4.根据 (4)式等式两端相等的原则,利用查找匹配的方法确定 α α α。具体过程如下:
1)给出候选的 α α α:设定 α α α的查找区间,如[0.2:0.001:10]即 α α α在(0.2,10)区间范围每隔0.001取值。
2)将所有 α α α代入式(4)右边计算 ρ ( α ) ρ(α) ρ(α)
3)计算所有 ρ ( α ) ρ(α) ρ(α)与步骤3得出估计值 R ^ \hat{R} 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

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

AGGD的定义如下:
在这里插入图片描述
其中:
在这里插入图片描述
AGGD共有三个参数, α 、 σ l 、 σ r α、σ_l、σ_r ασlσr α α α控制着分布的“形状”, σ l 、 σ r σ_l、σ_r σlσr分别控制左右两边的扩散程度。AGGD参数的估计方法参考论文《MULTISCALE SKEWED HEAVY TAILED MODEL FOR TEXTURE ANALYSIS》的二阶估计法。推导过程如下:
在这里插入图片描述
在这里插入图片描述
我的数学功底不强,所以我只能对照和论文理解个大概。欢迎大佬们在评论区指正!

方法的核心是以下的比:
r = m 1 2 μ 2 = ( γ 2 + 1 ) 2 ( γ 3 + 1 ) ( γ + 1 ) × ρ ( α ) ( 8 ) r=\frac{m_{1}^{2}}{\mu_{2}}=\frac{\left(\gamma^{2}+1\right)^{2}}{\left(\gamma^{3}+1\right)(\gamma+1)} \times \rho(\alpha) \ \ \ (8) r=μ2m12=(γ3+1)(γ+1)(γ2+1)2×ρ(α)   (8)

1. 首先估计 σ σ σ
σ ^ l = 1 N l − 1 ∑ k = 1 , x k < 0 N l x k 2 ∣ σ ^ r = 1 N r − 1 ∑ k = 1 , x k ≥ 0 N r x k 2 \begin{array}{l} \hat{\sigma}_{l}=\sqrt{\frac{1}{N_{l}-1} \sum_{k=1, x_{k}<0}^{N_{l}} x_{k}^{2} \mid} \\ \hat{\sigma}_{r}=\sqrt{\frac{1}{N_{r}-1} \sum_{k=1, x_{k} \geq 0}^{N_{r}} x_{k}^{2}} \end{array} σ^l=Nl11k=1,xk<0Nlxk2 σ^r=Nr11k=1,xk0Nrxk2

2. 计算 γ γ γ估计量:
γ ^ = β ^ l β ^ r = σ ^ l σ ^ r \hat{\gamma}=\frac{\hat{\beta}_{l}}{\hat{\beta}_{r}}=\frac{\hat{\sigma}_{l}}{\hat{\sigma}_{r}} γ^=β^rβ^l=σ^rσ^l

3.计算 u u u的二阶估计和 m m m的一阶估计, u 、 m u、m um的k阶估计如下:
μ k = E ( X k ) and  m k = E ( ∣ X ∣ k ) \mu_{k}=E\left(X^{k}\right) \text { and } m_{k}=E\left(|X|^{k}\right) μk=E(Xk) and mk=E(Xk)

然后根据(8)式左边估计 r ^ \hat{r} r^
r ^ = m 1 2 μ 2 \hat{r}=\frac{m_{1}^{2}}{\mu_{2}} r^=μ2m12

4. 设 R ^ \hat{R} R^ ρ ( α ) ρ(α) ρ(α)的估计量,则根据式(8):
R ^ = r ^ ( γ ^ 3 + 1 ) ( γ ^ + 1 ) ( γ ^ 2 + 1 ) 2 \hat{R}=\hat{r} \frac{\left(\hat{\gamma}^{3}+1\right)(\hat{\gamma}+1)}{\left(\hat{\gamma}^{2}+1\right)^{2}} R^=r^(γ^2+1)2(γ^3+1)(γ^+1)

5. 和GDD类似,利用查找匹配的方法确定 α α α。具体过程如下:
1)给出候选的 α α α:设定 α α α的查找区间,如[0.2:0.001:10]即 α α α在(0.2,10)区间范围每隔0.001取值。
2)将所有 α α α代入下式计算 ρ ( α ) ρ(α) ρ(α)
ρ ( α ) = Γ ( 2 / α ) 2 Γ ( 1 / α ) Γ ( 3 / α ) \rho(\alpha)=\frac{\Gamma(2 / \alpha)^{2}}{\Gamma(1 / \alpha) \Gamma(3 / \alpha)} ρ(α)=Γ(1/α)Γ(3/α)Γ(2/α)2

3)计算所得的 ρ ( α ) ρ(α) ρ(α)与步骤3估计的 R ^ \hat{R} 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))#估计σ_lsigma_r=np.sqrt(np.mean(vec[vec>0]**2))gamma_=sigma_l/sigma_r#步骤2#步骤3u2=np.mean(vec**2)m1=np.mean(np.abs(vec))r_=m1**2/u2R_=r_*(gamma_**3+1)*(gamma_+1)/((gamma_**2+1)**2)#步骤4diff=(R_-r_alpha)**2alpha_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.

这篇关于广义高斯分布(GGD)和非对称广义高斯分布(AGGD)的形状参数快速估计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/542741

相关文章

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

Python lambda函数(匿名函数)、参数类型与递归全解析

《Pythonlambda函数(匿名函数)、参数类型与递归全解析》本文详解Python中lambda匿名函数、灵活参数类型和递归函数三大进阶特性,分别介绍其定义、应用场景及注意事项,助力编写简洁高效... 目录一、lambda 匿名函数:简洁的单行函数1. lambda 的定义与基本用法2. lambda

使用Redis快速实现共享Session登录的详细步骤

《使用Redis快速实现共享Session登录的详细步骤》在Web开发中,Session通常用于存储用户的会话信息,允许用户在多个页面之间保持登录状态,Redis是一个开源的高性能键值数据库,广泛用于... 目录前言实现原理:步骤:使用Redis实现共享Session登录1. 引入Redis依赖2. 配置R