見出し画像

Radiomics超入門:Gray Level Run Length Matrix特徴

概要

Gray Level Run Length Matrix(GLRLM)は [Galloway1975] によって、テクスチャ特徴として導入されました。GLCMと同様に、GLRLMも画像または画像スタック内の離散化されたグレーレベルの分布を評価します。そのため、入力画像は離散化されていることが前提です。ただし、GLCMが隣接するボクセル内のグレーレベルの共起を評価するのに対し、GLRLMはRun Length(線の繋がりの長さ)を評価します。Run Lengthは、方向ベクトル$${m}$$に沿って同じグレーレベルを持つボクセルの線のように連続した繋がりの長さです。GLRLMは、グレーレベル$${i}$$に対して、長さ$${j}$$のRunの数をまとめたマトリクスになります。

GLRLMの基本的な考え方
(0°方向ベクトルで探索した場合)

別の簡単な例を見ていきましょう。

(a) 離散化されたグレーレベルのボクセルセット(2D)
(b) 探索方向のベクトルが (1,0)のときのGLRLM [0°]
(c) 探索方向のベクトルが (1,1)のときのGLRLM [45°]
(d) 探索方向のベクトルが (0,1)のときのGLRLM [90°]
(e) 探索方向のベクトルが (-1,1)のときのGLRLM [135°]
Addapted from IBSI ref Fig.14

ここで、ある方向ベクトルの時に得られたGLRLMを$${M_m}$$とします。$${M_m}$$は縦軸に$${N_g}$$、横軸に$${N_r}$$なマトリクスです。$${N_g}$$はROI 信号強度マスクのグレーレベル、$${N_r}$$は方向ベクトル$${m}$$で探索した時のRun Lengthのカウントです。よって、GLRLMの行列要素$${r_{ij}}$$は、グレーレベル$${i}$$でRun Length$${j}$$を持つRunの出現回数になります。

そして、$${N_v}$$を ROI 信号強度マスク内のボクセルの総数とし、$${M_m}$$の全要素の総和$${Ns}$$は、$${\sum_{i=1}^{N_g}\sum_{j=1}^{N_r} r_{ij}}$$となります。

周囲和(Marginal sum)も定義されています。

$${r_{i.}}$$は、グレーレベル$${i}$$に対するRun Length$${j}$$に対する周囲和、つまり、$${r_{i.}=\sum_{j=1}^{N_r} r_{ij}}$$です。

同様に、Run Length$${j}$$に対するグレーレベル$${i}$$の周囲和は$${r_{.j}=\sum_{i=1}^{N_g} r_{ij}}$$です。

特徴の集約

GLCMと同じ考え方になります。GLCMの解説を参照ください。

距離による重み付け

GLCMと同じ考え方になります。GLCMの解説を参照ください。マトリクスがGLRLMに変わったのみです。

GLRLM特徴

Short runs emphasis

短いRun Lengthを強調する特徴。

$$
F_{rlm.sre} = \frac {1} {N_s} \displaystyle\sum_{j=1}^{N_r} \frac {r_{.j}}{j^2}
$$

Long runs emphasis

長いRun Lengthを強調する特徴。

$$
F_{rlm.lre} = \frac {1} {N_s} \displaystyle\sum_{j=1}^{N_r} {j^2} r_{.j}
$$

Low gray level run emphasis

Short Runs Emphasisと似た特徴です [Chu1990]。Run Lengthが短いことが強調される代わりに、低いグレーレベルであることが強調されます。

$$
F_{rlm.lgre} = \frac {1} {N_s} \displaystyle\sum_{i=1}^{N_g} \frac {r_{i.}} {i^2}
$$

High gray level run emphasis

Long Runs Emphasisと似た特徴です [Chu1990]。Run Lengthが長いことが強調される代わりに、高いグレーレベルであることが強調されます。

$$
F_{rlm.hgre} = \frac {1} {N_s} \displaystyle\sum_{i=1}^{N_g} {i^2} r_{i.}
$$

Short run low gray level emphasis

この特徴は、Run Lengthが短く、グレーレベルが低いところに位置するGLRLMの左上 1/4 のRunを強調するものです [Dasarathy1991]。

$$
F_{rlm.srlge} = \frac {1} {N_s} \displaystyle\sum_{i=1}^{N_g} \displaystyle\sum_{j=1}^{N_r} \frac {r_{ij}} {i^2j^2}
$$

Short run high gray level emphasis

この特徴はランの長さが短く、グレーレベルが高いところに位置するGLRLMの左下 1/4 のRunを強調するものです [Dasarathy1991]。

$$
F_{rlm.srhge} = \frac {1} {N_s} \displaystyle\sum_{i=1}^{N_g} \displaystyle\sum_{j=1}^{N_r} \frac {i^2r_{ij}} {j^2}
$$

Long run low gray level emphasis

この特徴はRun Lengthが長く、グレーレベルが低いところに位置するGLRLMの右上 1/4 のRunを強調するものです [Dasarathy1991]。

$$
F_{rlm.lrlge} = \frac {1} {N_s} \displaystyle\sum_{i=1}^{N_g} \displaystyle\sum_{j=1}^{N_r} \frac {j^2r_{ij}} {i^2}
$$

Long run high gray level emphasis

この特徴はRun Lengthが長く、グレーレベルが高いところに位置するGLRLMの右下 1/4 のRunを強調するものです [Dasarathy1991]。

$$
F_{rlm.lrhge} = \frac {1} {N_s} \displaystyle\sum_{i=1}^{N_g} \displaystyle\sum_{j=1}^{N_r} i^2j^2r_{ij}
$$

Gray level non-uniformity

この特徴量は、グレーレベルに対する Run の分布を評価するものです。Run がグレーレベルに沿って均等に分布している場合、特徴値は低くなります。

$$
F_{rlm.glnu} = \frac {1} {N_s} \displaystyle\sum_{i=1}^{N_g} r_{i.}^2
$$

Normalised gray level non-uniformity

$${F_{rlm.glnu}}$$を正規化した特徴です。

$$
F_{rlm.glnu.norm} = \frac {1} {N_{s}^2} \displaystyle\sum_{i=1}^{N_g} r_{i.}^2
$$

Run length non-uniformity

この特徴量は、Run Lengthに対するRunの分布を評価する特徴量です。Run が Run Lengthに沿って均等に分布している場合、この特徴の値は低くなります。

$$
F_{rlm.rlnu} = \frac {1} {N_{s}} \displaystyle\sum_{j=1}^{N_r} r_{.j}^2
$$

Normalised run length non-uniformity

$${F_{rlm.rlnu}}$$を正規化した特徴です。

$$
F_{rlm.rlnu.norm} = \frac {1} {N_{s}^2} \displaystyle\sum_{j=1}^{N_r} r_{.j}^2
$$

Run percentage

この特徴は、実際に計測された Run の数と理論上の Run の最大数の割合です。強く直線的な ROI ボリューム、または均一な ROI ボリュームは低い値になります。

$$
F_{rlm.p.perc}=\frac {N_s} {N_v}
$$

この特徴がマージされたGLRLMを用いて計算される場合、$${N_v}$$は、適切な正規化のために、ROI 信号強度マスクのボクセル数とします。

Gray level variance

この特徴は、グレーレベルに対するRunのばらつきを推定する指標です。

$$
F_{rlm.gl.var} = \displaystyle\sum_{i=1}^{N_g} \displaystyle\sum_{j=1}^{N_r} (i-\mu)^2p_{ij}
$$

ここで、グレーレベル$${i}$$かつRun Length $${j}$$の結合確率推定値$${p_{ij}}$$と、$${\mu}$$は次のように計算されます。

$$
P_{ij} = r_{ij}/N_s
$$

$$
\mu = \displaystyle\sum_{i=1}^{N_g} \sum_{j=1}^{N_r} i p_{ij}
$$

Run length variance

この特徴は、Run Lengthに対してRunのばらつきを推定する指標です。

$$
F_{rlm.rl.var} = \displaystyle\sum_{i=1}^{N_g} \sum_{j=1}^{N_r} (j-\mu)^2p_{ij}
$$

ここで、グレーレベル$${i}$$かつRun Length $${j}$$の結合確率推定値$${p_{ij}}$$と、$${\mu}$$は次のように計算されます。

$$
P_{ij} = r_{ij}/N_s
$$

$$
\mu = \displaystyle\sum_{i=1}^{N_g} \displaystyle\sum_{j=1}^{N_r} j p_{ij}
$$

Run entropy

この特徴は [Albregtsen2000] によって提案されました。

$$
F_{rlm.rl.entro} = -\displaystyle\sum_{i=1}^{N_g} \displaystyle\sum_{j=1}^{N_r} p_{ij} \log_2 p_{ij}
$$

ここで、グレーレベル$${i}$$かつRun Length $${j}$$の結合確率推定値$${p_{ij}}$$と、$${\mu}$$は次のように計算されます。

$$
P_{ij} = r_{ij}/N_s
$$

実践

RadiomicsJを用いて、IBSIデジタルファントムからこれらの特徴を計算してみます。

GLRLMを表示する

上記の例を元に、2D をベースにして計算してみます。

// create 2d array
byte pixels[] = new byte[16];
byte r0[] = new byte[] { 1, 2, 2, 3 };
byte r1[] = new byte[] { 1, 2, 3, 3 };
byte r2[] = new byte[] { 4, 2, 4, 1 };
byte r3[] = new byte[] { 4, 1, 2, 3 };
// flatten to create ByteProcessor
int i= 0;
for(byte[] r: new byte[][] {r0,r1,r2,r3}) {
	for(byte v:r) {
		pixels[i++] = v;
	}
}
ImageProcessor bp = new ByteProcessor(4, 4, pixels);
ImagePlus imp = new ImagePlus("sample", bp);
int nBins = 4;// 1 to 4
		
//init
GLRLMFeatures test =null;
try {
	test = new GLRLMFeatures(
			imp,
			null,
			1,
			true,
			nBins,
			null,
			null);
} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
		
// angle new int[] {0,0,1} is ordered by z,y,x (dim2, dim1, dim0)
double[][] mat_0=null;
double[][] mat_45=null;
double[][] mat_90=null;
double[][] mat_135=null;
try {
	mat_0 = test.calcGLRLM(Utils.getAngleVectorKey(new int[] { 0, 0, 1 }), new int[] { 0, 0, 1 });
	mat_45 = test.calcGLRLM(Utils.getAngleVectorKey(new int[] { 0, 1, 1 }), new int[] { 0, 1, 1 });
	mat_90 = test.calcGLRLM(Utils.getAngleVectorKey(new int[] { 0, 1, 0 }), new int[] { 0, 1, 0 });
	mat_135 = test.calcGLRLM(Utils.getAngleVectorKey(new int[] { 0, 1, -1 }), new int[] { 0, 1, -1 });
} catch (Exception e) {
	e.printStackTrace();
}
System.out.println("Check : (x,y,z)(1,0,0) vector →");
System.out.println(test.toString(mat_0));
		
System.out.println("Check : (x,y,z)(1,1,0) vector ↗");
System.out.println(test.toString(mat_45));
		
System.out.println("Check : (x,y,z)(0,1,0) vector ↑");
System.out.println(test.toString(mat_90));
	
System.out.println("Check : (x,y,z)(-1,1,0) vector ↖");
System.out.println(test.toString(mat_135));
//各ベクトルにおけるGLRLM
Check : (x,y,z)(1,0,0) vector4.00 0.00 0.00 0.00 
3.00 1.00 0.00 0.00 
2.00 1.00 0.00 0.00 
3.00 0.00 0.00 0.00 

Check : (x,y,z)(1,1,0) vector4.00 0.00 0.00 0.00 
3.00 1.00 0.00 0.00 
2.00 1.00 0.00 0.00 
3.00 0.00 0.00 0.00 

Check : (x,y,z)(0,1,0) vector2.00 1.00 0.00 0.00 
2.00 0.00 1.00 0.00 
2.00 1.00 0.00 0.00 
1.00 1.00 0.00 0.00 

Check : (x,y,z)(-1,1,0) vector4.00 0.00 0.00 0.00 
3.00 1.00 0.00 0.00 
4.00 0.00 0.00 0.00 
3.00 0.00 0.00 0.00 

各特徴を計算する

IBSIデジタルファントムから特徴を計算します。RadiomicsJでは、3D averagingで特徴の集約を行うことができます。

ImagePlus ds_pair[] = TestDataLoader.digital_phantom1();
ImagePlus imp = ds_pair[0];
ImagePlus mask = ds_pair[1];
		
RadiomicsJ.targetLabel = 1;
		
GLRLMFeatures f = null;
try {
	f = new GLRLMFeatures(
			imp,
			mask,
			1,
			true,
			Utils.getNumOfBinsByMinMaxRange(imp, mask, 1),
			null,
			null);
} catch (Exception e) {
	e.printStackTrace();
}
		
System.out.println(GLRLMFeatureType.ShortRunEmphasis+":"+f.calculate(GLRLMFeatureType.ShortRunEmphasis.id()));//OK
System.out.println(GLRLMFeatureType.LongRunEmphasis+":"+f.calculate(GLRLMFeatureType.LongRunEmphasis.id()));//OK
System.out.println(GLRLMFeatureType.LowGrayLevelRunEmphasis+":"+f.calculate(GLRLMFeatureType.LowGrayLevelRunEmphasis.id()));//OK
System.out.println(GLRLMFeatureType.HighGrayLevelRunEmphasis +":"+f.calculate(GLRLMFeatureType.HighGrayLevelRunEmphasis.id()));//OK
System.out.println(GLRLMFeatureType.ShortRunLowGrayLevelEmphasis+":"+f.calculate(GLRLMFeatureType.ShortRunLowGrayLevelEmphasis.id()));//OK
System.out.println(GLRLMFeatureType.ShortRunHighGrayLevelEmphasis+":"+f.calculate(GLRLMFeatureType.ShortRunHighGrayLevelEmphasis.id()));//OK
System.out.println(GLRLMFeatureType.LongRunLowGrayLevelEmphasis+":"+f.calculate(GLRLMFeatureType.LongRunLowGrayLevelEmphasis.id()));//OK
System.out.println(GLRLMFeatureType.LongRunHighGrayLevelEmphasis+":"+f.calculate(GLRLMFeatureType.LongRunHighGrayLevelEmphasis.id()));//OK
System.out.println(GLRLMFeatureType.GrayLevelNonUniformity+":"+f.calculate(GLRLMFeatureType.GrayLevelNonUniformity.id()));//ok
System.out.println(GLRLMFeatureType.GrayLevelNonUniformityNormalized+":"+f.calculate(GLRLMFeatureType.GrayLevelNonUniformityNormalized.id()));//OK
System.out.println(GLRLMFeatureType.RunLengthNonUniformity+":"+f.calculate(GLRLMFeatureType.RunLengthNonUniformity.id()));//ok
System.out.println(GLRLMFeatureType.RunLengthNonUniformityNormalized+":"+f.calculate(GLRLMFeatureType.RunLengthNonUniformityNormalized.id()));//OK
System.out.println(GLRLMFeatureType.RunPercentage+":"+f.calculate(GLRLMFeatureType.RunPercentage.id()));//ok
System.out.println(GLRLMFeatureType.GrayLevelVariance+":"+f.calculate(GLRLMFeatureType.GrayLevelVariance.id()));//OK
System.out.println(GLRLMFeatureType.RunLengthVariance+":"+f.calculate(GLRLMFeatureType.RunLengthVariance.id()));//OK
System.out.println(GLRLMFeatureType.RunEntropy+":"+f.calculate(GLRLMFeatureType.RunEntropy.id()));//ok
//出力
ShortRunEmphasis:0.7052347295556062
LongRunEmphasis:3.061120905774842
LowGrayLevelRunEmphasis:0.6029798426410304
HighGrayLevelRunEmphasis:9.697624119625273
ShortRunLowGrayLevelEmphasis:0.35158027600601727
ShortRunHighGrayLevelEmphasis:8.539655587028166
LongRunLowGrayLevelEmphasis:2.390967619786772
LongRunHighGrayLevelEmphasis:17.566188661400165
GrayLevelNonUniformity:21.77620074464118
GrayLevelNonUniformityNormalized:0.430175156107442
RunLengthNonUniformity:26.853351397011608
RunLengthNonUniformityNormalized:0.5127708185542873
RunPercentage:0.6798336798336798
GrayLevelVariance:3.464978728384561
RunLengthVariance:0.5735422830251776
RunEntropy:2.4320741335433476

RadiomicsJの引用はこちら

Kobayashi, T. RadiomicsJ: a library to compute radiomic features. Radiol Phys Technol 15, 255–263 (2022). https://doi.org/10.1007/s12194-022-00664-4

RadiomicsJのリンク

https://github.com/tatsunidas/RadiomicsJ


Stay visionary


この記事が気に入ったらサポートをしてみませんか?