-
Notifications
You must be signed in to change notification settings - Fork 104
Global radiomics feature calculation parameters
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.
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"]
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"
}
}
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 this dictionary will be left empty for radiomics extraction for outcomes modeling.
"settings": {
"resample": {
"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": {
"sequence": "RV",
"angle2DStdDeg": 7,
"volScaleStdFraction": 0.1,
"superPixVol": 0.005
},
"firstOrder" :{
"binWidthEntropy": 25,
"offsetForEnergy": 0
},
"texture" :{
"binwidth": 25,
"minIntensity": 0,
"maxIntensity": 500,
"directionality": "2D",
"avgType": "feature",
"voxelOffset": 1,
"patchRadiusVox": [3, 3, 3],
"imgDiffThresh": 10
},
"shape" :{
"rcs": []
},
"peakValley" :{
"peakRadius": [2, 2, 0],
"units": "vox"
},
"ivh" :{
"binwidth": 0.1,
"xForIxPct": [20, 30, 40],
"xForIxCc": [200,300,400],
"xForVxPct": [10, 30, 30],
"xForVxAbs": [0, 10, 30]
}
}
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": {
}
}
The parameters supplied to the global radiomics feature calculation are supplied via the paramS
Matlab data structure. paramS
has 5 fields containing the parameters required for calculating the first order, higher order, shape, peak/valley and IVH based features.
First, initialize Matlab data structures for each type of global radiomics feature
firstOrderParamsS = struct;
higherOrderParamS = struct;
shapeParamS = struct;
peakValleyParamS = struct;
ivhParamS = struct;
whichFeatS = struct;
The next task is to populate the data structures defined above with parameter fields and values.
- First order feature parameters:
The only parameter required is the offset to calculate the rms, energy and total energy features. The image intensities are offset by this value before computing the RMS, Energy and TotalEnergy features. Typically, set to 1000 for CT scans and 0 for other modalities with (+)ve image intensities.
paramS.firstOrderParamS.offsetForEnergy = 1000; % 0 for PET SUVs.
paramS.firstOrderParamS.binWidthEntropy = 25; % binwidth to calculate entropy. Typically, the same value is used for discretizing image for higher order (texture) calculation.
- Higher order feature parameters:
higherOrderParamS.minIntensity = []; % minimum clipping intensity. Values less than this are clipped to this value.
higherOrderParamS.maxIntensity = []; % maximum clipping intensity. Values greater than this are clipped to this value.
higherOrderParamS.minIntensityCutoff = -50; % voxels with intensity lower than this value are ignored. Leave empty to use minimum within the ROI.
higherOrderParamS.maxIntensityCutoff = 200; % voxels with intensity greater than this value are ignored. Leave empty to use maximum within the ROI.
higherOrderParamS.numGrLevels = []; % number of gray levels to use. Leave empty to use a fixed binwidth.
higherOrderParamS.binwidth = 25; % binwidth to discretize an image.
higherOrderParamS.neighborVoxelOffset = 5; % voxel neighbor distance for Haralick texture calculation.
higherOrderParamS.patchRadius2dV = [2 2 0]; % patch radius for NGTDM and NGLDM features.
higherOrderParamS.imgDiffThresh = 0; % difference threshold for NGTDM and NGLDM features.
higherOrderParamS.patchRadius3dV = [1 1 1]; % patch radius for NGTDM and NGLDM features.
paramS.higherOrderParamS = higherOrderParamS;
- Shape feature parameters:
shapeParamS.rcsV = []; % [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.
paramS.shapeParamS = shapeParamS;
- Peak/valley feature parameters:
peakValleyParamS.peakRadius = [2 2 0]; % neighborhood patch radius for averaging intensities.
paramS.peakValleyParamS = peakValleyParamS;
- IVH feature parameters:
ivhParamS.xAbsForVxV = -140:10:100; % CT, 0:2:28; % PET. Vector of absolute intensities.
ivhParamS.xForIxV = 10:10:90; % Vector of percentage volumes
ivhParamS.xAbsForIxV = 10:20:200; % Vector of absolute volumes [cc]
ivhParamS.xForVxV = 10:10:90; % Vector of percent intensity cutoff
paramS.ivhParamS = ivhParamS;
- Types of features to calculate: These are samlpe flags for feature calculation using the 2d neighborhood.
whichFeatS.shape = 1;
whichFeatS.harFeat2Ddir = 1;
whichFeatS.harFeat2Dcomb = 0;
whichFeatS.harFeat3Ddir = 0;
whichFeatS.harFeat3Dcomb = 0;
whichFeatS.rlmFeat2Ddir = 1;
whichFeatS.rlmFeat2Dcomb = 0;
whichFeatS.rlmFeat3Ddir = 0;
whichFeatS.rlmFeat3Dcomb = 0;
whichFeatS.ngtdmFeatures2d = 1;
whichFeatS.ngtdmFeatures3d = 0;
whichFeatS.ngldmFeatures2d = 1;
whichFeatS.ngldmFeatures3d = 0;
whichFeatS.szmFeature2d = 1;
whichFeatS.szmFeature3d = 0;
whichFeatS.firstOrder = 1;
whichFeatS.ivh = 0;
whichFeatS.peakValley = 1;
paramS.whichFeatS = whichFeatS;
- The
toQuantizeFlag
flag specifies whether to quantize the input scan
paramS.toQuantizeFlag = 1; % 1: quantize the input scan, 0: don't quantize (the input scan must already be quantized).