Python - pyradiomics - 邻域灰阶依赖性矩阵特征(Neighboring Gray Level Dependence Matrix Features)

本文详细解析了邻域灰阶依赖性矩阵(NGLDM)的多种特征计算方法,如X依赖强调(SDE/LDE)、Y灰度强调(LGLE/HGLE)、交叉特征(SDLGLE/SDHGLE/LDLGLE/LDHGLE)以及非均匀性和标准化非均匀性(GLN/NGLN/DN/NDN)。这些特征用于量化图像纹理、灰度分布和依赖关系,有助于图像特征提取和分析。
摘要由CSDN通过智能技术生成

对于一个图像 I
请添加图片描述
它的邻域灰阶依赖性矩阵(NGLDM)为:
请添加图片描述
推导过程见先前的文章:
Python - pyradiomics - 邻域灰阶依赖性矩阵(Neighboring Gray Level Dependence Matrix)

本文主要讨论由邻域灰阶依赖性矩阵得到的图像特征
首先介绍两个基本概念:
1.N_z
N z = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) N_z = \sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\textbf{P}(i,j)} Nz=i=1Ngj=1NdP(i,j)
公式的意思就是NGLDM求和,这个值是等同于 I 包括的像素个数,也就是说,在一个确定的感兴趣区(region of interest, ROI)中,N_z值是固定的。
2.p
p ( i , j ) = P ( i , j ) N z p(i,j) = \frac{\textbf{P}(i,j)}{N_z} p(i,j)=NzP(i,j)
标准化后的P矩阵(注意大小写),反映灰度 i 出现 j 个依赖像素的联合概率(joint probability)

1. X Dependence Emphasis

(1) Small Dependence Emphasis (SDE)

S D E = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) j 2 N z SDE = \frac{\sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\frac{\textbf{P}(i,j)}{j^2}}}{N_z} SDE=Nzi=1Ngj=1Ndj2P(i,j)
注:pyradiomics官网上给的公式中为除以 i 的平方,实际上是错的,源码中是除以 j 的平方。在IBSI的附件中,也是除以 j 的平方。

Zwanenburg A, Vallières M, Abdalah MA, et al. The Image Biomarker Standardization Initiative: Standardized Quantitative Radiomics for High-Throughput Image-based Phenotyping. Radiology. 2020;295(2):328-338.

在NGLDM中,Small Dependence相当于矩阵左边的部分,SDE的计算,相当于是P矩阵与一个 1/j2 矩阵对位相乘,得到一个新的矩阵,求和之后除N_z,这个 1/j2 矩阵为:
请添加图片描述

因此P中原本的值,dependence越大,在与P对位相乘后变小的幅度越大。因此计算出来的SDE受到Small Dependence的点的影响会更大一点(也就是Emphasis)。SDE值越大表示依赖性越小,纹理越不均匀。

(2) Large Dependence Emphasis (LDE)

L D E = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) j 2 N z LDE = \frac{\sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\textbf{P}(i,j)j^2}}{N_z} LDE=Nzi=1Ngj=1NdP(i,j)j2
和SDE正好相反,LDE是增加了P矩阵右边部分的权重:
请添加图片描述
因此计算出来的LDE受到Large Dependence的点的影响会更大一点。LDE值越大表示依赖性越大,纹理越均匀。

j = np.arange(1, NGLDM.shape[1] + 1)
Nz = NGLDM.sum()
SDE = np.sum(NGLDM / (j[None, :] ** 2)) / Nz
LDE = np.sum(NGLDM * (j[None, :] ** 2)) / Nz
print(SDE)
print(LDE)
'''
0.5410997732426304
4.020408163265306
'''

2. Y Gray Level Emphasis

(1) Low Gray Level Emphasis (LGLE)

L G L E = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) i 2 N z LGLE = \frac{\sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\frac{\textbf{P}(i,j)}{i^2}}}{N_z} LGLE=Nzi=1Ngj=1Ndi2P(i,j)
类比SDE,这个的1/i2矩阵为:
请添加图片描述
因此计算出来的LGLE受Low Gray Level的点的影响会更大一点。LGLE值越大表示图像中低灰度值成分越多。

(2) High Gray Level Emphasis (HGLE)

H G L E = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) i 2 N z HGLE = \frac{\sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\textbf{P}(i,j)i^2}}{N_z} HGLE=Nzi=1Ngj=1NdP(i,j)i2
类比LDE,这个的i2矩阵为:
请添加图片描述
因此计算出来的HGLE受High Gray Level的点的影响会更大一点。HGLE值越大表示图像中高灰度值成分越多。

i = np.arange(1, NGLDM.shape[0] + 1)
LGLE = np.sum(NGLDM / (i[:, None] ** 2)) / Nz
HGLE = np.sum(NGLDM * (i[:, None] ** 2)) / Nz
print(LGLE)
print(HGLE)
'''
0.24821093063075575
14.26530612244898
'''

3. X Dependence Y Gray Level Emphasis

(1) Small Dependence Low Gray Level Emphasis (SDLGLE)

S D L G L E = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) i 2 j 2 N z SDLGLE = \frac{\sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\frac{\textbf{P}(i,j)}{i^2j^2}}}{N_z} SDLGLE=Nzi=1Ngj=1Ndi2j2P(i,j)
1/i2j2矩阵即为1/i2 * 1/j2
请添加图片描述
因此计算出来的SDLGLE受NGLDM 左上象限 的点的影响会更大一点。

(2) Small Dependence High Gray Level Emphasis (SDHGLE)

S D L G L E = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) i 2 j 2 N z SDLGLE = \frac{\sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\frac{\textbf{P}(i,j)i^2}{j^2}}}{N_z} SDLGLE=Nzi=1Ngj=1Ndj2P(i,j)i2
i2 /j2矩阵即为:
请添加图片描述
因此计算出来的SDHGLE受NGLDM 左下象限 的点的影响会更大一点。

(3) Large Dependence Low Gray Level Emphasis (LDLGLE)

L D L G L E = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) j 2 i 2 N z LDLGLE = \frac{\sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\frac{\textbf{P}(i,j)j^2}{i^2}}}{N_z} LDLGLE=Nzi=1Ngj=1Ndi2P(i,j)j2
j2 /i2矩阵即为:
请添加图片描述
因此计算出来的LDLGLE受NGLDM 右上象限 的点的影响会更大一点。

(4) Large Dependence High Gray Level Emphasis (LDHGLE)

L D H G L E = ∑ i = 1 N g ∑ j = 1 N d P ( i , j ) i 2 j 2 N z LDHGLE = \frac{\sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{\textbf{P}(i,j)i^2j^2}}{N_z} LDHGLE=Nzi=1Ngj=1NdP(i,j)i2j2

i2j2矩阵即为i2 * j2
请添加图片描述
因此计算出来的LDHGLE受NGLDM 右下象限 的点的影响会更大一点。

SDLGLE = np.sum(NGLDM / (j[None, :] ** 2) / (i[:, None] ** 2)) / Nz
SDHGLE = np.sum(NGLDM / (j[None, :] ** 2) * (i[:, None] ** 2)) / Nz
LDLGLE = np.sum(NGLDM * (j[None, :] ** 2) / (i[:, None] ** 2)) / Nz
LDHGLE = np.sum(NGLDM * (j[None, :] ** 2) * (i[:, None] ** 2)) / Nz
print(SDLGLE)
print(SDHGLE)
print(LDLGLE)
print(LDHGLE)
'''
0.10436156681115379
10.909438775510203
1.297043130177241
33.734693877551024
'''

由此可见前8个特征就是反复套娃,通过赋予不同区域不同的权重,实现了求加权平均数

4. Non-Uniformity and Normalized Non-Uniformity

(1) Gray Level Non-Uniformity (GLN)

G L N = ∑ i = 1 N g ( ∑ j = 1 N d P ( i , j ) ) 2 N z GLN = \frac{\sum^{N_g}_{i=1}\left(\sum^{N_d}_{j=1}{\textbf{P}(i,j)}\right)^2}{N_z} GLN=Nzi=1Ng(j=1NdP(i,j))2
这个公式表示,先对每一行进行求和后再平方,再将每一行得到的和的平方求和除以N_z。
pyradiomics说:

a lower GLN value correlates with a greater similarity in intensity values.

IBSI说:

The feature value is low when dependence counts are equally distributed along grey levels.

dependence counts就是每一行求和,数值上等同于这一行对应的像素在图像中的个数,所以人话就是,给定一个ROI范围和n级灰阶,GLN在每级灰阶像素数量接近时较小,不同灰阶像素数量差异越大,GLN越大。GLN和图像的不均匀性(Non-Uniformity)成正相关。
假设一个图像有10个像素点,有3级灰阶(x1, x2, x3),那么n_3 = 10 - n_1 - n_2(n_1, n_2, n_3为像素值为对应灰阶的像素的个数),GLN可以表示为:

G L N = n 1 2 + n 2 2 + ( 10 − n 1 − n 2 ) 2 10 GLN = \frac{n_1^{2} + n_2^{2} + (10 - n_1 - n_2 )^{2}}{10} GLN=10n12+n22+(10n1n2)2

那么在什么时候取最小值呢?

n_1/n_212345678
16654464242465466
254443836384454\
3463834343846\\
44236343642\\\
542383842\\\\
6464446\\\\\
75454\\\\\\
866\\\\\\\


n_1,n_2不会同时取5,6,7,8,我不想调整了,所以请忽略图片的右半部分。。。

可以看到,n_1 \ n_2 \ n_3取值为(3, 3, 4) \ (3, 4, 3) \ (4, 3, 3)时函数取到最小值,即每级灰阶像素数量最接近时最小

(2) Normalized Gray Level Non-Uniformity (NGLN)

这个特征在三维图像中可以通过数学证明等同于直方图特征Uniformity,因此被删除了

(3) Dependence Non-Uniformity (DN)

D N = ∑ j = 1 N d ( ∑ i = 1 N g P ( i , j ) ) 2 N z DN = \frac{\sum^{N_d}_{j=1}\left(\sum^{N_g}_{i=1}{\textbf{P}(i,j)}\right)^2}{N_z} DN=Nzj=1Nd(i=1NgP(i,j))2
先对每一列进行求和后再平方,再将每一列得到的和的平方求和除以N_z。类比GLN, DN在各个dependent level最接近相同时取到最小值。

(4) Normalized Dependence Non-Uniformity (NDN)

D N N = ∑ j = 1 N d ( ∑ i = 1 N g P ( i , j ) ) 2 N z 2 DNN = \frac{\sum^{N_d}_{j=1}\left(\sum^{N_g}_{i=1}{\textbf{P}(i,j)}\right)^2}{N_z^2} DNN=Nz2j=1Nd(i=1NgP(i,j))2
就是在DN的基础上再除以一个N_z,得到标准化后的特征,减小了ROI大小对于特征值的影响

5. Variance

(1) Gray Level Variance (GLV)

G L V = ∑ i = 1 N g ∑ j = 1 N d p ( i , j ) ( i − μ ) 2 , where  μ = ∑ i = 1 N g ∑ j = 1 N d i p ( i , j ) GLV = \displaystyle\sum^{N_g}_{i=1}\displaystyle\sum^{N_d}_{j=1}{p(i,j)(i - \mu)^2} \text{, where } \mu = \displaystyle\sum^{N_g}_{i=1}\displaystyle\sum^{N_d}_{j=1}{ip(i,j)} GLV=i=1Ngj=1Ndp(i,j)(iμ)2, where μ=i=1Ngj=1Ndip(i,j)
首先回顾普通的方差计算公式
σ 2 = ∑ ( X − μ ) 2 N \sigma^2=\frac{\sum (X - \mu)^2}{N} σ2=N(Xμ)2
对于一个4*4的图像:
请添加图片描述
如果不看它像素的具体值,而是看像素从小到大的排序值,图像为:
请添加图片描述
计第i个等级的像素值出现的概率为p(i),则有

ip(i)
10.25
20.25
30.25
40.25

此时求灰阶等级i的方差的话,首先要计算均值:
μ = 1 + 2 + 3 + 4 + 4 + 1 + 2 + 3 + 3 + 2 + 1 + 4 + 2 + 1 + 4 + 3 16 = 4 ∗ 1 + 4 ∗ 2 + 4 ∗ 3 + 4 ∗ 4 16 = 4 16 ∗ 1 + 4 16 ∗ 2 + 4 16 ∗ 3 + 4 16 ∗ 4 = ∑ i p ( i ) \begin{aligned} \mu & = \frac{1+2+3+4+4+1+2+3+3+2+1+4+2+1+4+3}{16}\\ & = \frac{4*1+4*2+4*3+4*4}{16} \\ &= \frac{4}{16} *1+\frac{4}{16} *2+\frac{4}{16} *3+\frac{4}{16} *4\\ &=\sum ip(i) \end{aligned} μ=161+2+3+4+4+1+2+3+3+2+1+4+2+1+4+3=1641+42+43+44=1641+1642+1643+1644=ip(i)
然后,计算方差:
σ 2 = ( 1 − μ ) 2 + ( 2 − μ ) 2 + ( 3 − μ ) 2 + . . . + ( 1 − μ ) 2 + ( 4 − μ ) 2 + ( 3 − μ ) 2 16 = 4 ∗ ( 1 − μ ) 2 + 4 ∗ ( 2 − μ ) 2 + 4 ∗ ( 3 − μ ) 2 + 4 ∗ ( 4 − μ ) 2 16 = 4 16 ∗ ( 1 − μ ) 2 + 4 16 ∗ ( 2 − μ ) 2 + 4 16 ∗ ( 3 − μ ) 2 + 4 16 ∗ ( 4 − μ ) 2 = ∑ p ( i ) ( i − μ ) 2 \begin{aligned} \sigma^2 & = \frac{(1-\mu)^2+(2-\mu)^2+(3-\mu)^2+...+(1-\mu)^2+(4-\mu)^2+(3-\mu)^2}{16}\\ & = \frac{4*(1-\mu)^2+4*(2-\mu)^2+4*(3-\mu)^2+4*(4-\mu)^2}{16} \\ &= \frac{4}{16} *(1-\mu)^2+\frac{4}{16} *(2-\mu)^2+\frac{4}{16} *(3-\mu)^2+\frac{4}{16} *(4-\mu)^2\\ &=\sum p(i)(i-\mu)^2 \end{aligned} σ2=16(1μ)2+(2μ)2+(3μ)2+...+(1μ)2+(4μ)2+(3μ)2=164(1μ)2+4(2μ)2+4(3μ)2+4(4μ)2=164(1μ)2+164(2μ)2+164(3μ)2+164(4μ)2=p(i)(iμ)2
对于p矩阵, GLV和μ的计算都可以看出只和 i 有关,在某一行中,j 对应的系数相同,因此不妨先对行求和,得到一个列向量pg:
p g = ∑ j = 1 N d p ( i , j ) ,   w h e r e   i ∈ [ 1 , N g ] p_g= \sum_{j=1}^{N_d} p(i,j),\ where\ i\in [1,N_g] pg=j=1Ndp(i,j), where i[1,Ng]
直观来看,p_g(i)表示第i个灰阶出现的概率(在图像中占的比例)。即上述例子中的p(i)

请添加图片描述

因此,计算GLV的公式就很容易理解了,它是衡量的灰阶(而非像素绝对值)的方差。
G L V = ∑ i = 1 N g p g ( i ) ( i − μ ) 2 , where  μ = ∑ i = 1 N g i p g ( i ) GLV = \sum^{N_g}_{i=1}p_g(i)(i - \mu)^2 \text{, where } \mu = \sum^{N_g}_{i=1}ip_g(i) GLV=i=1Ngpg(i)(iμ)2, where μ=i=1Ngipg(i)

(2) Dependence Variance (DV)

D V = ∑ i = 1 N g ∑ j = 1 N d p ( i , j ) ( j − μ ) 2 , where  μ = ∑ i = 1 N g ∑ j = 1 N d j p ( i , j ) DV = \sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{p(i,j)(j - \mu)^2} \text{, where }\mu = \sum^{N_g}_{i=1}\sum^{N_d}_{j=1}{jp(i,j)} DV=i=1Ngj=1Ndp(i,j)(jμ)2, where μ=i=1Ngj=1Ndjp(i,j)
类比GLV,DV用每个像素值对于的依赖像素数目代替 I’ 中的像素绝对值计算方差。DV是对列求和,得到行向量pd,然后计算依赖性的方差。
p d = ∑ i = 1 N g p ( i , j ) ,   w h e r e   j ∈ [ 1 , N d ] D V = ∑ j = 1 N d p d ( j ) ( j − μ ) 2 , where  μ = ∑ j = 1 N d j p d ( j ) p_d= \sum_{i=1}^{N_g} p(i,j),\ where\ j\in [1,N_d] \\ DV =\sum^{N_d}_{j=1}{p_d(j)(j - \mu)^2} \text{, where }\mu = \sum^{N_d}_{j=1}{jp_d(j)} pd=i=1Ngp(i,j), where j[1,Nd]DV=j=1Ndpd(j)(jμ)2, where μ=j=1Ndjpd(j)

p = NGLDM / Nz

pd = np.sum(p, 0)
pg = np.sum(p, 1)
u_i = np.sum(pg * i)
u_j = np.sum(pd * j)
GLV = np.sum(pg * (i - u_i) ** 2)
DV = np.sum(pd * (j - u_j) ** 2)
print(GLV)
print(DV)
'''
3.1995002082465644
0.721366097459392
'''

6. Dependence Entropy (DE)

D e p e n d e n c e   E n t r o p y = − ∑ i = 1 N g ∑ j = 1 N d p ( i , j ) log ⁡ 2 p ( i , j ) Dependence\ Entropy = -\displaystyle\sum^{N_g}_{i=1}\displaystyle\sum^{N_d}_{j=1}{p(i,j)\log_{2}p(i,j)} Dependence Entropy=i=1Ngj=1Ndp(i,j)log2p(i,j)
信息论之父香农对与信息包含的信息量这样定义

一条信息的信息量大小和它的不确定性有直接的关系。比如说,我们要搞清楚一件非常非常不确定的事,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了解,我们不需要太多的信息就能把它搞清楚。所以,从这个角度,我们可以认为,信息量的度量就等于不确定性的多少。

对于任意一个随机变量 X,它的熵定义如下:
H ( x ) = − ∑ i = 1 n p ( x i ) l o g 2 p ( x i ) H(x)=-\sum_{i=1}^{n} p(x_i)log_{2}{p(x_i)} H(x)=i=1np(xi)log2p(xi)
变量的不确定性越大,熵(entropy)也就越大,把它搞清楚所需要的信息量也就越大。
显然,对于NGLDM,它包含灰阶等级 i 和依赖性 j 两个变量,因此NGLDM的熵,或它包含的信息为
D e p e n d e n c e   E n t r o p y = − ∑ i = 1 N g ∑ j = 1 N d p ( i , j ) log ⁡ 2 p ( i , j ) Dependence\ Entropy = -\displaystyle\sum^{N_g}_{i=1}\displaystyle\sum^{N_d}_{j=1}{p(i,j)\log_{2}p(i,j)} Dependence Entropy=i=1Ngj=1Ndp(i,j)log2p(i,j)

DE = -np.sum(p[np.nonzero(p)] * np.log2(p[np.nonzero(p)]))
print(DE)
3.877252131670978
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值