Skip to content

Global radiomics feature calculation parameters

Aditi Iyer edited this page Feb 2, 2023 · 28 revisions

Parameters used for radiomics calculation are supplied via a user-defined JSON file. Users can create a copy of the template JSON file and modify the settings as needed. The following sections describe various elements of radiomics settings in detail.

Structure names

Names of structures used in feature extraction are specified via the structures field. Users can standardize structure names by using the CERR+ tool.

Example
Defining two input structures, roi1 and roi2

"structures": ["roi1","roi2"]

Image types:

Radiomic features can be calculated using the original scanned image or derived images. Supported image types include Original as well as:

The pages linked above provide descriptions of individual filter settings and sample configurations.

Example 1. Feature extraction from Original and Wavelet image types

"imageType": {
  		  "Original": {},
		  "Wavelets": {
				"Wavelets": "Haar",
				"Index": "",
				"Direction": "HLH"
			      }

              }  

Example 2 It is possible to specify multiple settings for the same filter type as a list of parameter dictionaries. For example, to extract radiomics from different directional filtered wavelet images, e.g.:

"imageType": {
  		  "Original": {},
		  "Wavelets": [{
				"Wavelets": "Haar",
				"Index": "",
				"Direction": "HLH"
			      },
                              {
				"Wavelets": "Haar",
				"Index": "",
				"Direction": "HHH"
			      }]

	    }

Settings for radiomic feature extraction:

Pre-processing settings including padding, resampling and perturbation are specified within the settings dictionary. The perturbation dictionary specifies the sequence of perturbation chains (Zwanenburg et al) to be applied before feature extraction. This dictionary can be left empty in case no perturbation is to be applied. Note that this dictionary should be left empty for radiomics extraction for outcomes modeling.

This section additionally supports settings specific to different radiomics feature classes, i.e, firstOrder, texture, shape, peakValley, and ivh. Supported configurations are described below.

"settings": {	

    "padding": { # If left empty, the ROI is padded through expansion by [5,5,5] voxels
                "method": "expand",   # Padding method. Supported options include "expand","padzeros", 
                                      # "circular","replicate","symmetric", and "none".
                "size": [5,5,5]       # Amount of padding [no. rows, no. cols, no. slices] 
              }, 	  
 
    "resample": { # Leave empty if no resampling is applied
		 "resolutionXCm": 0.1, # resampling resolution in L-R
		 "resolutionYCm": 0.1, # resampling resolution in A-P
		 "resolutionZCm": 0.1, # resampling resolution in S-I
		 "interpMethod": "sinc" # Interpolation method. Supported options 
                                        # include "linear", "cubic", "neareast", "spline", "makima" and "sinc".
                                        # NOTE: Masks are resampled using the "linear" method 
                                        # and binarized using threshold=0.5.
	         },
   
   "perturbation": { # Leave empty if no perturbation is required
 	            "sequence": "RV", # any combination of RVCT
	            "angle2DStdDeg": 7, # std dev to sample angle from normal distribution.
		    "volScaleStdFraction": 0.01, # std dev to sample volume scale from normal distribution.
		    "superPixVol": 0.005 # volume of super pixel in cc
		   },

    "firstOrder" :{ 
		   "binWidthEntropy": 25, #Used to discretize image for entropy calculation.
		   "offsetForEnergy": 0 # Typically, set to 1000 for CT scans and 0 for other modalities with (+)ve image intensities.
                  },
    "texture" :{ 
                 "numGrLevels": [], # number of gray levels to use. Leave empty to use a fixed binwidth.
	         "binwidth": 25, # binwidth to discretize an image.
                 "minSegThreshold": -500, # minimum segmentation threshold. Segmentation mask is adjusted to exclude voxels below this value.
                 "maxSegThreshold": 1000, # maximum segmentation threshold. Segmentation mask is adjusted to exclude voxels above this value.
		 "minClipIntensity": -500, # minimum clipping intensity. Values less than this are clipped to this value. Clipping is used to ensure identical bins (same start & end intensities across a cohort). Can be left empty to use min intensity from the dataset.
		 "maxClipIntensity": 1000, # maximum clipping intensity. Values greater than this are clipped to this value.  Clipping is used to ensure identical bins (same start & end intensities across a cohort). Can be left empty to use max intensity from the dataset.
                 "directionality": "2D", # "2D" (4 directional offsets are used - 0,45,90,135) or "3D" (13 directional offsets are used)
		 "avgType": "feature", # "feature" (average of features from different offsets)  or "textureMatrix" (feature resulting from texture matrix averaged across different offsets)
		 "voxelOffset": 1, # voxel neighbor distance for Haralick texture calculation.
		 "patchRadiusVox": [3, 3, 3], # patch radius for NGTDM and NGLDM features. Resulting patches are of size 2*patchRadiusVox + 1
		 "imgDiffThresh": 10 # difference threshold for NGTDM and NGLDM features.
                },

    "shape" :{ 
	      "rcs": [] # [numRows, numCols, numSlics] to resample scan for shape calculation.. This should be chosen to create a fine enough mesh without too much computational overload. Leave empty to use the resolution same as that of the image.
             },

    "peakValley" :{ 
		   "peakRadius": [2, 2, 0], # neighborhood patch radius for averaging intensities.
		   "units": "vox"  # Supported options: "vox" (voxels), "cm" (physical units).	
                  },

    "ivh" :{ 
	    "binwidth": 0.1,
	    "xForIxCc": [200,300,400], # Vector of absolute intensities (e.g. -50:20:100 for    CT, 0:2:28; % PET SUV).
            "xForIxPct": [20, 30, 40], # Vector of percentage volumes
            "xForVxAbs": [0, 10, 30], # Vector of absolute volumes [cc]
	    "xForVxPct": [10, 30, 30] # Vector of percent intensity cutoff			    
           }		   	

       }

Features

Extraction of features belonging to a particular class is specified via featureClass dictionary. The dictionary for each feature class contains the featureList field which lists the features required for that class. If featureList contains all, then all features will be generated for that class.

"featureClass":{
			

        "shape": {
	           "featureList": ["compactness","sphericity"]
                 },

        "firstOrder": {
			"featureList": ["totalEnergy"]
	              },

	"glcm": {
	         "featureList": ["all"]
                },

	"glrlm": {
		   "featureList": ["RLN"]                                 
	         },

	"glszm": {
			          
                 },

	"gldm": {
			    
                },

	"gtdm": {			    	
                                  
	         }

               }

Clone this wiki locally