![見出し画像](https://assets.st-note.com/production/uploads/images/115893780/rectangle_large_type_2_750ad1b376a382c7f0ebdd4878d6756d.png?width=1200)
Radiomics超入門:Intensity histogram feature(信号強度ヒストグラム特徴)
信号強度ヒストグラムは、ROI 信号強度マスク内にある信号強度分布$${X_{gl}}$$をヒストグラムのビンに離散化した強度分布$${X_d}$$から計算されます。
$$
X_d={X_{d,1},X_{d,2},...,X_{d,N_v}}
$$
これは、$${N_v}$$個の離散化された信号強度のボクセルからなる集合(離散化されたボクセルセット)です。
ヒストグラムは、ある離散化信号強度$${i}$$ の頻度をカウントして得られた度数$${n_i}$$を、信号強度順に並べたものです。
$$
H={n_1,n_2,...,n_{Ng}}
$$
ヒストグラムを使えば、離散化されたボクセルセットの中で、どのくらい信号強度$${i}$$をもつボクセルが含まれるのかを、出現確率$${p_i}$$として計算することができます。確率といっても、単純に全体のうちの何割かを計算しているだけです。
$$
p_i=n_i/N_v
$$
Intensity histogram 特徴は、3D で計算されることが推奨されています。2D で画像スライスごとに計算した後、平均化などで集約されることは推奨されません。
離散化したボクセルセットから得られる統計的な特徴
IBSIでは、離散化を必要とするかしないかで、特徴の種類を厳密に区別しています。Intensity-based statistical 特徴は離散化は不要ですが、Intensity histogram 特徴は離散化が前提です。
以下のIntensity histogram 特徴は、Intensity-based statistical 特徴にて定義されている特徴と同じ定義で計算されます。違いは単純に、入力されるボクセルセットが離散化されているか否かです。計算方法は変わりません。これらの計算については、"Intensity-based statistical 特徴"の解説を参照してください。
Mean discretised intensity
Discretised intensity variance
Discretised intensity skewness
(Excess) discretised intensity kurtosis
Median discretised intensity
Minimum discretised intensity
$${10^{th}}$$ discretised intensity percentile
$${90^{th}}$$ discretised intensity percentile
Maximum discretised intensity
Discretised intensity interquartile range
Discretised intensity range
Intensity histogram mean absolute deviation
Intensity histogram robust mean absolute deviation
Intensity histogram median absolute deviation
Intensity histogram coefficient of variation
Intensity histogram quartile coefficient of dispersion
最頻値:Intensity histogram mode
ヒストグラム$${H}$$の中で最も度数の高かった信号強度です。
エントロピー:Discretised intensity entropy
エントロピー[Aerts2014]は情報理論的な概念で、$${X_d}$$に含まれる情報の尺度となります。 シャノン・エントロピー(Shannon entropy)は次のように定義されます。
$$
F_{ih.entropy} = - \sum_{i=1}^{N_g} {p_i} \log_2 p_i
$$
連続した信号強度分布をもつボクセルセットでは、$${-\log2{N_v}}$$になる傾向があるため、エントロピーは離散化されたボクセルセットに対して意味が多い指標です。
均一性:Discretised intensity uniformity
Uniformity(均一性)[Aerts2014]は次のように式で表されます。
$$
F_{ih.uniformity} = \displaystyle\sum_{i=1}^{N_g} {p_i}^2
$$
ほとんどの信号強度が 1 つのビンに含まれるような極端に偏ったヒストグラムでは、均一性は1に近づきます。下限値は$${1/N_g}$$です。
この特徴は、energy(エネルギーまたはエナジー)と呼ばれることもあります。
Maximum histogram gradient
ヒストグラム$${H}$$の勾配$${H'}$$は、離散化された信号強度ごとに次のように表されます。
$$
H'_i =
\begin{cases}
{n_2 - n_1} & i=1 \\
(n_{i+1} - n_{i-1})/2 & 1\lt i \lt N_g\\
n_{N_g} - n_{N_{g-1}} &i=N_g
\end{cases}
$$
$${H}$$の$${n_i}$$はビンの度数であり、$${n_i =0}$$のビン(度数がゼロのビン)は省略されません。一般に、ヒストグラム勾配はさまざまな方法で計算できます。上の方法は実装が簡単で、$${H}$$と同じビン数の勾配$${H′}$$を導くという利点があります。これは、$${H}$$の離散化された信号強度と$${H′}$$のビンとの間の直接的な対応を維持するのに役立ちます。
最大ヒストグラム勾配[VanDijk2016]は、次のとおりです。
$$
F_{ih.max.grad}=max(H′)
$$
Maximum histogram gradient intensity
最大ヒストグラム勾配信号強度 $${F_{ih.max.grad.gl}}$$[VanDijk2016] は、最大ヒストグラム勾配となる離散化信号強度です。
Minimum histogram gradient
最小ヒストグラム勾配は、次のように表されます。
$$
F_{ih.min.grad}=min(H′)
$$
Minimum histogram gradient intensity
最小ヒストグラム勾配信号強度$${F_{ih.min.grad.gl}}$$[VanDijk2016]は、最小ヒストグラム勾配となる離散化信号強度です。
実践
RadiomicsJを用いて、IBSIデジタルファントムからこれらの特徴を計算してみます。
ImagePlus ds_pair[] = TestDataLoader.digital_phantom1();
ImagePlus imp = ds_pair[0];
ImagePlus mask = ds_pair[1];
RadiomicsJ.targetLabel = 1;
RadiomicsJ.nBins = Utils.getNumOfBinsByMinMaxRange(imp, mask, RadiomicsJ.targetLabel);//digital phantom of roi, max.
IntensityHistogramFeatures ihf = new IntensityHistogramFeatures(imp, mask, RadiomicsJ.targetLabel, true, RadiomicsJ.nBins, null);
System.out.println(IntensityHistogramFeatureType.MeanDiscretisedIntensity+":"+ihf.calculate(IntensityHistogramFeatureType.MeanDiscretisedIntensity.id()));//OK
System.out.println(IntensityHistogramFeatureType.Variance+":"+ihf.calculate(IntensityHistogramFeatureType.Variance.id()));//OK
System.out.println(IntensityHistogramFeatureType.Skewness+":"+ihf.calculate(IntensityHistogramFeatureType.Skewness.id()));//OK
System.out.println(IntensityHistogramFeatureType.Kurtosis+":"+(ihf.calculate(IntensityHistogramFeatureType.Kurtosis.id())-3));//OK, 3.3.4 (Excess) intensity kurtosis
System.out.println(IntensityHistogramFeatureType.Median+":"+ihf.calculate(IntensityHistogramFeatureType.Median.id()));//ok
System.out.println(IntensityHistogramFeatureType.Minimum+":"+ihf.calculate(IntensityHistogramFeatureType.Minimum.id()));//OK
System.out.println(IntensityHistogramFeatureType.Percentile10+":"+ihf.calculate(IntensityHistogramFeatureType.Percentile10.id()));//OK
System.out.println(IntensityHistogramFeatureType.Percentile90+":"+ihf.calculate(IntensityHistogramFeatureType.Percentile90.id()));//OK
System.out.println(IntensityHistogramFeatureType.Maximum+":"+ihf.calculate(IntensityHistogramFeatureType.Maximum.id()));//OK
System.out.println(IntensityHistogramFeatureType.Mode+":"+ihf.calculate(IntensityHistogramFeatureType.Mode.id()));//OK
System.out.println(IntensityHistogramFeatureType.Interquartile+":"+ihf.calculate(IntensityHistogramFeatureType.Interquartile.id()));//OK
System.out.println(IntensityHistogramFeatureType.Range+":"+ihf.calculate(IntensityHistogramFeatureType.Range.id()));//ok
System.out.println(IntensityHistogramFeatureType.MeanAbsoluteDeviation+":"+ihf.calculate(IntensityHistogramFeatureType.MeanAbsoluteDeviation.id()));
System.out.println(IntensityHistogramFeatureType.RobustMeanAbsoluteDeviation+":"+ihf.calculate(IntensityHistogramFeatureType.RobustMeanAbsoluteDeviation.id()));
System.out.println(IntensityHistogramFeatureType.MedianAbsoluteDeviation+":"+ihf.calculate(IntensityHistogramFeatureType.MedianAbsoluteDeviation.id()));
System.out.println(IntensityHistogramFeatureType.CoefficientOfVariation+":"+ihf.calculate(IntensityHistogramFeatureType.CoefficientOfVariation.id()));
System.out.println(IntensityHistogramFeatureType.QuartileCoefficientOfDispersion+":"+ihf.calculate(IntensityHistogramFeatureType.QuartileCoefficientOfDispersion.id()));
System.out.println(IntensityHistogramFeatureType.Entropy+":"+ihf.calculate(IntensityHistogramFeatureType.Entropy.id()));//ok
System.out.println(IntensityHistogramFeatureType.Uniformity+":"+ihf.calculate(IntensityHistogramFeatureType.Uniformity.id()));//or named energy
System.out.println(IntensityHistogramFeatureType.MaximumHistogramGradient+":"+ihf.calculate(IntensityHistogramFeatureType.MaximumHistogramGradient.id()));//ok
System.out.println(IntensityHistogramFeatureType.MaximumHistogramGradientIntensity+":"+ihf.calculate(IntensityHistogramFeatureType.MaximumHistogramGradientIntensity.id()));//ok
System.out.println(IntensityHistogramFeatureType.MinimumHistogramGradient+":"+ihf.calculate(IntensityHistogramFeatureType.MinimumHistogramGradient.id()));//ok
System.out.println(IntensityHistogramFeatureType.MinimumHistogramGradientIntensity+":"+ihf.calculate(IntensityHistogramFeatureType.MinimumHistogramGradientIntensity.id()));//ok
//出力
MeanDiscretisedIntensity:2.1486486486486487
Variance:3.0454711468225
Skewness:1.0838207225574612
Kurtosis:-0.3546204806878417
Median:1.0
Minimum:1.0
Percentile10:1.0
Percentile90:4.0
Maximum:6.0
Mode:1.0
Interquartile:3.0
Range:5.0
MeanAbsoluteDeviation:1.552227903579255
RobustMeanAbsoluteDeviation:1.1138338159946533
MedianAbsoluteDeviation:1.1486486486486487
CoefficientOfVariation:0.8121978584917317
QuartileCoefficientOfDispersion:0.6
Entropy:1.2656115555865246
Uniformity:0.5124178232286339
MaximumHistogramGradient:8.0
MaximumHistogramGradientIntensity:3.0
MinimumHistogramGradient:-50.0
MinimumHistogramGradientIntensity:1.0
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