Traditional Radiomics
Config: feature_types includes traditional
Output: raw_image_radiomics.csv
Definition
PyRadiomics features extracted from each preprocessed image modality within a
tumor ROI. The ROI is a binary mask derived from the habitat label map
(voxels with label \(\ge 1\) → foreground); anatomical masks/ files are
not used. Habitat labels are otherwise ignored—features reflect intratumoral
signal and texture on the raw (multi-delay) images.
Implementation
Parameter file:
params_file_of_non_habitat(optional; bundledroipreset →habit/resources/radiomics/parameter.yamlwhen omitted)Code:
habit/compat/engines/habitat_extraction/habitat_features/builtin_plugins.py(TraditionalRadiomicsPlugin) →habitat_radiomics.py
Output columns
Column pattern |
Description |
|---|---|
|
One column per PyRadiomics feature × image modality under the subject folder |
(excluded) |
Columns whose names contain |
Feature definitions
HABIT extracts first-order, GLCM, GLRLM, GLSZM, GLDM (IBSI NGLDM), NGTDM,
and 3-D shape features using the PyRadiomics 3.1 formulas, which follow
the Image Biomarker Standardisation Initiative (IBSI;
Zwanenburg et al., Radiology 2020).
Texture aggregation is IBSI 3-D averaged (mean over the 13 unique
3-D angles), not 3-D merged. The same definitions are used by
habit radiomics, traditional / each_habitat /
whole_habitat feature types, supervoxel_radiomics,
voxel_radiomics, and the native C path.
PyRadiomics alignment
ROI-level radiomics, voxel-level radiomics, and 3-D shape all match
PyRadiomics 3.1 FeatureExtractor.execute() on the same image, mask,
label, and settings (binWidth, voxelArrayShift, distances, …).
ROI-level (habit radiomics / traditional, each_habitat,
whole_habitat, supervoxel_radiomics with default
union_bin=false): first-order, GLCM, GLRLM, GLSZM, GLDM, NGTDM.
traditional / whole_habitat call execute() directly.
each_habitat and default supervoxel_radiomics use the native C
path with per-label bins; vs execute() they agree to about
1e-10 relative (Energy / TotalEnergy at floating-point ULP).
Shape (ROI only): original_shape_* from PyRadiomics
execute() / computeShape. Shape is a whole-ROI mesh quantity;
there is no per-voxel shape map.
Voxel-level (voxel_radiomics): first-order and texture via
execute(..., voxelBased=True). The CPU path is that extractor
(pre-crop does not change values). Torch / CUDA uses the same formulas;
texture vs CPU sits at about \(10^{-15}\), first-order percentiles
at about \(10^{-8}\) (quantile algorithm). Set
torch_dtype: float64 for the closest CPU match.
Gates: tests/kernels/test_supervoxel_native_parity.py,
tests/kernels/test_ibsi_digital_phantom.py,
tests/kernels/test_*_gpu_parity.py.
These are not PyRadiomics and must not be compared to execute():
graph, msi, ith_score, volume, local_entropy, and
supervoxel mean / std / percentile.
supervoxel_radiomics with union_bin=true is a different
discretization (one shared gray scale on the union mask).
JointAverage / Autocorrelation / HighGrayLevel* will not
match per-ROI execute(); that is intended, not a formula bug.
Two conventions must be read with the IBSI manual, not against it:
Kurtosis is Pearson kurtosis. IBSI reports excess kurtosis (Fisher, normal distribution = 0). HABIT / PyRadiomics = IBSI + 3.
HABIT does not extract IBSI families it does not implement: GLDZM, local-intensity peak, intensity-volume histogram, Moran’s I, or Geary’s C. Deprecated PyRadiomics shape names (Compactness 1/2, Spherical disproportion) are not computed.
IBSI-1 Phase 1 digital phantom
The table uses the official IBSI digital phantom (5×4×4 voxels, 2 mm
isotropic, 74-voxel ROI; intensities include 1, 3, 4, 6, 9)
from theibsi/data_sets
(CC-BY-4.0) and the published dig. phantom / 3-D averaged (or 3-D
for GLSZM / NGTDM / NGLDM) reference values in the IBSI reference manual
(Image features).
Settings match Phase 1: no interpolation, binWidth=1,
symmetricalGLCM=True, distances=[1], NGLDM coarseness
\(\alpha=0\), voxelArrayShift=0.
HABIT is the native C + CPU-formula value when that family is in the
fast path; shape is the PyRadiomics execute value used by
traditional_radiomics. HABIT and PyRadiomics columns match. Remaining
gaps versus the published IBSI figures are the Kurtosis convention
(above) or the few significant digits in the IBSI manual (for example
556 vs 556.333). A regression test loads the same NIfTI pair:
tests/kernels/test_ibsi_digital_phantom.py.
Family |
Feature |
IBSI ID |
IBSI |
HABIT |
PyRadiomics |
Note |
|---|---|---|---|---|---|---|
shape |
MeshVolume |
RNU0 |
556 |
556.3333333 |
556.3333333 |
shape via PyRadiomics; IBSI rounded |
shape |
VoxelVolume |
YEKZ |
592 |
592 |
592 |
shape via PyRadiomics (traditional path) |
shape |
SurfaceArea |
C0JK |
388 |
388.0706299 |
388.0706299 |
shape via PyRadiomics; IBSI rounded |
shape |
SurfaceVolumeRatio |
2PR5 |
0.698 |
0.697550563 |
0.697550563 |
shape via PyRadiomics (traditional path) |
shape |
Sphericity |
QCFX |
0.843 |
0.8429401437 |
0.8429401437 |
shape via PyRadiomics (traditional path) |
shape |
Maximum3DDiameter |
L0JK |
13.1 |
13.11487705 |
13.11487705 |
shape via PyRadiomics (traditional path) |
firstorder |
Mean |
Q4LE |
2.15 |
2.148648649 |
2.148648649 |
|
firstorder |
Variance |
ECT3 |
3.05 |
3.045471147 |
3.045471147 |
|
firstorder |
Skewness |
KE2A |
1.08 |
1.083820723 |
1.083820723 |
|
firstorder |
Kurtosis |
IPH6 |
-0.355 |
2.645379519 |
2.645379519 |
Pearson kurtosis; IBSI is excess (HABIT = IBSI + 3) |
firstorder |
Median |
Y12H |
1 |
1 |
1 |
|
firstorder |
Minimum |
1GSF |
1 |
1 |
1 |
|
firstorder |
10Percentile |
QG58 |
1 |
1 |
1 |
|
firstorder |
90Percentile |
8DWT |
4 |
4 |
4 |
|
firstorder |
Maximum |
84IY |
6 |
6 |
6 |
|
firstorder |
InterquartileRange |
SALO |
3 |
3 |
3 |
|
firstorder |
Range |
2OJQ |
5 |
5 |
5 |
|
firstorder |
MeanAbsoluteDeviation |
4FUA |
1.55 |
1.552227904 |
1.552227904 |
|
firstorder |
RobustMeanAbsoluteDeviation |
1128 |
1.11 |
1.113833816 |
1.113833816 |
|
firstorder |
Energy |
N8CA |
567 |
567 |
567 |
|
firstorder |
RootMeanSquared |
5ZWQ |
2.77 |
2.768061084 |
2.768061084 |
|
firstorder |
Entropy |
TLU2 |
1.27 |
1.265611556 |
1.265611556 |
|
firstorder |
Uniformity |
BJ5W |
0.512 |
0.5124178232 |
0.5124178232 |
|
glcm |
MaximumProbability |
GYBY |
0.503 |
0.5028111708 |
0.5028111708 |
|
glcm |
JointAverage |
60VM |
2.14 |
2.142995006 |
2.142995006 |
|
glcm |
SumSquares |
UR99 |
3.1 |
3.099320789 |
3.099320789 |
|
glcm |
JointEntropy |
TU9B |
2.4 |
2.399711278 |
2.399711278 |
|
glcm |
DifferenceAverage |
TF7R |
1.43 |
1.430981176 |
1.430981176 |
|
glcm |
DifferenceVariance |
D3YU |
3.06 |
3.056282622 |
3.056282622 |
|
glcm |
DifferenceEntropy |
NTRS |
1.56 |
1.562733277 |
1.562733277 |
|
glcm |
SumAverage |
ZGXS |
4.29 |
4.285990012 |
4.285990012 |
|
glcm |
SumEntropy |
P6QZ |
1.92 |
1.922606453 |
1.922606453 |
|
glcm |
JointEnergy |
8ZQL |
0.303 |
0.3029752503 |
0.3029752503 |
|
glcm |
Contrast |
ACUI |
5.32 |
5.324479994 |
5.324479994 |
|
glcm |
Id |
IB1Z |
0.677 |
0.6766151333 |
0.6766151333 |
|
glcm |
Idn |
NDRX |
0.851 |
0.8506785598 |
0.8506785598 |
|
glcm |
Idm |
WF0Z |
0.618 |
0.6177393638 |
0.6177393638 |
|
glcm |
Idmn |
1QCO |
0.898 |
0.8984432172 |
0.8984432172 |
|
glcm |
InverseVariance |
E8JP |
0.0604 |
0.06041630527 |
0.06041630527 |
|
glcm |
Correlation |
NI2N |
0.157 |
0.1573500301 |
0.1573500301 |
|
glcm |
Autocorrelation |
QWB0 |
5.06 |
5.05543601 |
5.05543601 |
|
glcm |
ClusterTendency |
DG8W |
7.07 |
7.072803163 |
7.072803163 |
|
glcm |
ClusterShade |
7NFM |
16.6 |
16.64409305 |
16.64409305 |
|
glcm |
ClusterProminence |
AE86 |
145 |
144.7033814 |
144.7033814 |
IBSI rounded |
glcm |
Imc1 |
R8DG |
-0.157 |
-0.1568482348 |
-0.1568482348 |
|
glcm |
Imc2 |
JN9H |
0.52 |
0.5195878631 |
0.5195878631 |
|
glrlm |
ShortRunEmphasis |
22OV |
0.705 |
0.7052347296 |
0.7052347296 |
|
glrlm |
LongRunEmphasis |
W4KF |
3.06 |
3.061120906 |
3.061120906 |
|
glrlm |
LowGrayLevelRunEmphasis |
V3SW |
0.603 |
0.6029798426 |
0.6029798426 |
|
glrlm |
HighGrayLevelRunEmphasis |
G3QZ |
9.7 |
9.69762412 |
9.69762412 |
|
glrlm |
ShortRunLowGrayLevelEmphasis |
HTZT |
0.352 |
0.351580276 |
0.351580276 |
|
glrlm |
ShortRunHighGrayLevelEmphasis |
GD3A |
8.54 |
8.539655587 |
8.539655587 |
|
glrlm |
LongRunLowGrayLevelEmphasis |
IVPO |
2.39 |
2.39096762 |
2.39096762 |
|
glrlm |
LongRunHighGrayLevelEmphasis |
3KUM |
17.6 |
17.56618866 |
17.56618866 |
|
glrlm |
GrayLevelNonUniformity |
R5YN |
21.8 |
21.77620074 |
21.77620074 |
|
glrlm |
GrayLevelNonUniformityNormalized |
OVBL |
0.43 |
0.4301751561 |
0.4301751561 |
|
glrlm |
RunLengthNonUniformity |
W92Y |
26.9 |
26.8533514 |
26.8533514 |
|
glrlm |
RunLengthNonUniformityNormalized |
IC23 |
0.513 |
0.5127708186 |
0.5127708186 |
|
glrlm |
RunPercentage |
9ZK5 |
0.68 |
0.6798336798 |
0.6798336798 |
|
glrlm |
GrayLevelVariance |
8CE5 |
3.46 |
3.464978728 |
3.464978728 |
|
glrlm |
RunVariance |
SXLW |
0.574 |
0.573542283 |
0.573542283 |
|
glrlm |
RunEntropy |
HJ9O |
2.43 |
2.432074134 |
2.432074134 |
|
glszm |
LargeAreaEmphasis |
48P8 |
550 |
550 |
550 |
|
glszm |
LowGrayLevelZoneEmphasis |
XMSY |
0.253 |
0.2527777778 |
0.2527777778 |
|
glszm |
HighGrayLevelZoneEmphasis |
5GN9 |
15.6 |
15.6 |
15.6 |
|
glszm |
SmallAreaLowGrayLevelEmphasis |
5RAI |
0.0256 |
0.02560437642 |
0.02560437642 |
|
glszm |
SmallAreaHighGrayLevelEmphasis |
HW1V |
2.76 |
2.763345306 |
2.763345306 |
|
glszm |
LargeAreaLowGrayLevelEmphasis |
YH51 |
503 |
502.7944444 |
502.7944444 |
IBSI rounded |
glszm |
LargeAreaHighGrayLevelEmphasis |
J17V |
1490 |
1494.6 |
1494.6 |
IBSI rounded |
glszm |
GrayLevelNonUniformity |
JNSA |
1.4 |
1.4 |
1.4 |
|
glszm |
GrayLevelNonUniformityNormalized |
Y1RO |
0.28 |
0.28 |
0.28 |
|
glszm |
SizeZoneNonUniformity |
4JP3 |
1 |
1 |
1 |
|
glszm |
SizeZoneNonUniformityNormalized |
VB3A |
0.2 |
0.2 |
0.2 |
|
glszm |
ZonePercentage |
P30P |
0.0676 |
0.06756756757 |
0.06756756757 |
|
glszm |
GrayLevelVariance |
BYLV |
2.64 |
2.64 |
2.64 |
|
glszm |
ZoneVariance |
3NSA |
331 |
330.96 |
330.96 |
|
glszm |
ZoneEntropy |
GU8N |
2.32 |
2.321928095 |
2.321928095 |
|
ngtdm |
Coarseness |
QCDE |
0.0296 |
0.0296042257 |
0.0296042257 |
|
ngtdm |
Contrast |
65HE |
0.584 |
0.5837109156 |
0.5837109156 |
|
ngtdm |
Busyness |
NQ30 |
6.54 |
6.543568457 |
6.543568457 |
|
ngtdm |
Complexity |
HDEZ |
13.5 |
13.5397636 |
13.5397636 |
|
ngtdm |
Strength |
1X9X |
0.763 |
0.7634954331 |
0.7634954331 |
|
gldm |
SmallDependenceEmphasis |
SODN |
0.045 |
0.04499635706 |
0.04499635706 |
|
gldm |
LargeDependenceEmphasis |
IMOQ |
109 |
109 |
109 |
|
gldm |
LowGrayLevelEmphasis |
TL9H |
0.693 |
0.6933183183 |
0.6933183183 |
|
gldm |
HighGrayLevelEmphasis |
OAE7 |
7.66 |
7.662162162 |
7.662162162 |
|
gldm |
SmallDependenceLowGrayLevelEmphasis |
EQ3F |
0.00963 |
0.009630607594 |
0.009630607594 |
|
gldm |
SmallDependenceHighGrayLevelEmphasis |
JA6D |
0.736 |
0.7361715884 |
0.7361715884 |
|
gldm |
LargeDependenceLowGrayLevelEmphasis |
NBZI |
102 |
102.4508258 |
102.4508258 |
IBSI rounded |
gldm |
LargeDependenceHighGrayLevelEmphasis |
9QMG |
235 |
234.9864865 |
234.9864865 |
|
gldm |
GrayLevelNonUniformity |
FP8K |
37.9 |
37.91891892 |
37.91891892 |
|
gldm |
DependenceNonUniformity |
Z87G |
4.86 |
4.864864865 |
4.864864865 |
|
gldm |
DependenceNonUniformityNormalized |
OKJI |
0.0657 |
0.06574141709 |
0.06574141709 |
|
gldm |
DependenceEntropy |
FCBV |
4.4 |
4.40373838 |
4.40373838 |
|
glszm |
SmallAreaEmphasis |
P001 |
0.255 |
0.2551820408 |
0.2551820408 |
See PyRadiomics Feature Reference for per-feature formulas.