Understanding results#

GUI and Python batch extraction write radiomics.csv in the selected output directory. Each data row represents one successfully extracted case and mask for that run’s image and settings. The single-ROI Python API returns a dictionary of feature names and values instead.

Read the metadata#

The CSV starts with the following columns:

Output metadata#

Column

Meaning

pat_id

Case-folder name, not a patient identifier read from DICOM metadata.

mask_id

Requested structure or mask name.

bounding_box_min

Shortest side of the morphological ROI’s bounding box, in voxels. This is a side length, not a coordinate or a length in millimetres.

no_voxels

Number of nonzero voxels in the morphological mask used for analysis. This is not the number of intensity voxels retained by re-segmentation.

no_bins

Number of distinct occupied grey levels in the discretized intensity image used for histogram or texture calculation. It can be smaller than the requested bin count. It does not describe IVH discretization. The single-ROI API reports zero when the selected families do not use that discretized image.

The bounding-box and voxel-count fields describe the analysis mask after validation, including any slices removed for 2D or 2.5D texture analysis. See ROI size requirements for those checks.

In Python, pass include_metadata=True to Radiomics.extract_features to add the three numeric metadata fields. Case and mask identifiers are added by the batch workflow; the single-ROI API does not infer them from file paths.

Read feature names and values#

For example, the Python API quickstart returns an intensity-statistics dictionary containing an entry approximately equal to:

{"stat_mean": -46.88}  # Selected entry, rounded for display; CT intensity in HU.

Feature prefixes identify families: stat_ denotes intensity statistics, morph_ morphology, cm_ co-occurrence-matrix features, and ivh_ intensity-volume histogram features. Units depend on the feature and input image: the CT mean is in HU, whereas the mean of a filtered image uses that filter’s response units. The texture name cm_contrast_3D_avg means GLCM contrast calculated with 3D neighbourhoods and averaged across directions. GLCM and GLRLM names end in a dimension and aggregation suffix:

  • 2D, 2_5D, or 3D identifies the texture dimension.

  • avg identifies AVER or DIR_MERG aggregation.

  • comb identifies MERG or SLICE_MERG aggregation.

Other texture families use a dimension suffix without avg or comb. See Feature extraction concepts for the supported combinations. Column names do not encode all settings, such as bin width or slice weighting; retain the configuration with the output and use it when comparing runs.

The Radiomics family classes provide get_feature_names() for listing their feature keys. For GLCM and GLRLM, these are base names; extraction adds the configured aggregation suffixes.

Check completeness#

Compare the actual (pat_id, mask_id) pairs with the cases and structures you requested. A missing or rejected mask produces no feature row. Other masks in the same case can still succeed. If every extraction is skipped, batch extraction still creates an empty CSV file.

If batch IVH preparation or extraction fails, the affected structure retains its other features but has blank IVH values. If IVH fails for every structure, the CSV has no ivh_ columns. Inspect omitted_ivh_structures on each radiomics case result for the reasons, including for processed cases; see Python batch workflows.

A non-finite feature value, such as NaN, is different from a missing row: extraction returned that feature, but a numeric value may be undefined for the input. For example, spatial autocorrelation is undefined for constant intensities. Check the feature’s reference documentation and the input ROI before interpreting such values.

For GUI runs, check the completion message and logs. For batch runs, inspect both case-level errors and skipped_structures as shown in Python batch workflows. A processed case count does not guarantee that every requested structure produced a row. See Troubleshooting for missing results.