文章目录
对于一个图像 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=1∑Ngj=1∑NdP(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=Nz∑i=1Ng∑j=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=Nz∑i=1Ng∑j=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=Nz∑i=1Ng∑j=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=Nz∑i=1Ng∑j=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=Nz∑i=1Ng∑j=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=Nz∑i=1Ng∑j=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=Nz∑i=1Ng∑j=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=Nz∑i=1Ng∑j=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=Nz∑i=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+(10−n1−n2)2
那么在什么时候取最小值呢?
n_1/n_2 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
1 | 66 | 54 | 46 | 42 | 42 | 46 | 54 | 66 |
2 | 54 | 44 | 38 | 36 | 38 | 44 | 54 | \ |
3 | 46 | 38 | 34 | 34 | 38 | 46 | \ | \ |
4 | 42 | 36 | 34 | 36 | 42 | \ | \ | \ |
5 | 42 | 38 | 38 | 42 | \ | \ | \ | \ |
6 | 46 | 44 | 46 | \ | \ | \ | \ | \ |
7 | 54 | 54 | \ | \ | \ | \ | \ | \ |
8 | 66 | \ | \ | \ | \ | \ | \ | \ |
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=Nz∑j=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=Nz2∑j=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=1∑Ngj=1∑Ndp(i,j)(i−μ)2, where μ=i=1∑Ngj=1∑Ndip(i,j)
首先回顾普通的方差计算公式
σ
2
=
∑
(
X
−
μ
)
2
N
\sigma^2=\frac{\sum (X - \mu)^2}{N}
σ2=N∑(X−μ)2
对于一个4*4的图像:
如果不看它像素的具体值,而是看像素从小到大的排序值,图像为:
计第i个等级的像素值出现的概率为p(i),则有
i | p(i) |
---|---|
1 | 0.25 |
2 | 0.25 |
3 | 0.25 |
4 | 0.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=164∗1+4∗2+4∗3+4∗4=164∗1+164∗2+164∗3+164∗4=∑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=1∑Ndp(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=1∑Ngpg(i)(i−μ)2, where μ=i=1∑Ngipg(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=1∑Ngj=1∑Ndp(i,j)(j−μ)2, where μ=i=1∑Ngj=1∑Ndjp(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=1∑Ngp(i,j), where j∈[1,Nd]DV=j=1∑Ndpd(j)(j−μ)2, where μ=j=1∑Ndjpd(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=1∑Ngj=1∑Ndp(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=1∑np(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=1∑Ngj=1∑Ndp(i,j)log2p(i,j)
DE = -np.sum(p[np.nonzero(p)] * np.log2(p[np.nonzero(p)]))
print(DE)
3.877252131670978