Skip to content

Global radiomics feature calculation parameters

Aditya P. Apte edited this page Apr 2, 2020 · 28 revisions

Parameters used for radiomics calculation are supplied via user-defined .json file. Users can create a copy of the template .json file and modify as per the dataset. Following sections describe various elements of radiomics settings in details.

Structure names:

Names of structures to extract radiomics are specified via the structures field. Users can standardize structure names by using this tool. An example definition of structures field with two structures, roi1 and roi2 is as shown below:

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

Image types:

Radiomics can be calculated for the original and the derived images. All derived images under the texture calculation are supported. An example definition of imageType field with original and wavelet filtered images is as shown below:

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

              }

It is possible to specify multiple parameters for the same class of the derived image as a list of parameter dictionaries. For example, to extract radiomics from different directional filtered wavelet images:

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

	    }

Settings for various features:

Settings for various types of radiomics features are specified within the settings dictionary. Additionally, 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 will be left empty for radiomics extraction for outcomes modeling.

"settings": {		   
    "resample": { # Leave empty if no resampling is required
		 "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" # "linear" or "sinc"
	         },

   "perturbation": { # Leave empty if no perturbation is required
 	            "sequence": "RV", # any combination of RVCT
	            "angle2DStdDeg": 7, # std dev to sample angle from normal distrib.
		    "volScaleStdFraction": 0.1, # std dev to sample volume scale from normal distrib.
		    "superPixVol": 0.005 # volume of super pixel in cc
		   },

    "firstOrder" :{ 
		   "binWidthEntropy": 25,
		   "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.
		 "minIntensity": [], # minimum clipping intensity. Values less than this are clipped to this value. Leave empty for no clipping.
		 "maxIntensity": [], # maximum clipping intensity. Values greater than this are clipped to this value. Leave empty for no clipping.
                 "directionality": "2D", # "2D" or "3D"
		 "avgType": "feature", # "feature" or "textureMatrix"
		 "voxelOffset": 1, # voxel neighbor distance for Haralick texture calculation.
		 "patchRadiusVox": [3, 3, 3], # patch radius for NGTDM and NGLDM features.
		 "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"	
                  },

    "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