@@ -1034,3 +1034,115 @@ def _list_outputs(self):
1034
1034
if len (self .inputs .save_state ):
1035
1035
outputs ['save_state' ] = os .path .abspath (self .inputs .save_state )
1036
1036
return outputs
1037
+
1038
+
1039
+ class MeasureImageSimilarityInputSpec (ANTSCommandInputSpec ):
1040
+ dimension = traits .Enum (
1041
+ 2 , 3 , 4 ,
1042
+ argstr = '--dimensionality %d' , usedefault = False ,
1043
+ position = 1 , desc = 'Dimensionality of the fixed/moving image pair' ,
1044
+ )
1045
+ fixed_image = File (
1046
+ exists = True , mandatory = True ,
1047
+ desc = ('image to which the moving image is warped' ),
1048
+ )
1049
+ moving_image = File (
1050
+ exists = True ,mandatory = True ,
1051
+ desc = ('image to apply transformation to (generally a coregistered functional)' ),
1052
+ )
1053
+ metric = traits .Enum (
1054
+ "CC" , "MI" , "Mattes" , "MeanSquares" , "Demons" , "GC" ,
1055
+ argstr = "%s" , mandatory = True ,
1056
+ )
1057
+ metric_weight = traits .Float (requires = ['metric' ], desc = '' ,mandatory = True ,)
1058
+ radius_or_number_of_bins = traits .Int (requires = ['metric' ], desc = '' ,mandatory = True ,)
1059
+ sampling_strategy = traits .Enum (
1060
+ "None" , "Regular" , "Random" , None ,
1061
+ requires = ['metric' ],mandatory = True ,
1062
+ )
1063
+ sampling_percentage = traits .Either (
1064
+ traits .Range (low = 0.0 , high = 1.0 ), None ,
1065
+ requires = ['metric' ], mandatory = True ,
1066
+ )
1067
+ fixed_image_mask = File (
1068
+ exists = True , argstr = '%s' ,
1069
+ desc = 'mask used to limit metric sampling region of the fixed image' ,
1070
+ )
1071
+ moving_image_mask = File (
1072
+ exists = True , requires = ['fixed_image_mask' ],
1073
+ desc = 'mask used to limit metric sampling region of the moving image' ,
1074
+ )
1075
+
1076
+
1077
+ class MeasureImageSimilarityOutputSpec (TraitedSpec ):
1078
+ similarity = traits .Float ()
1079
+
1080
+
1081
+ class MeasureImageSimilarity (ANTSCommand ):
1082
+
1083
+ """
1084
+
1085
+
1086
+ Examples
1087
+ --------
1088
+
1089
+ >>> from nipype.interfaces.ants import MeasureImageSimilarity
1090
+ >>> sim = MeasureImageSimilarity()
1091
+ >>> sim.inputs.dimension = 3
1092
+ >>> sim.inputs.metric = 'MI'
1093
+ >>> sim.inputs.fixed_image = 'T1.nii'
1094
+ >>> sim.inputs.moving_image = 'resting.nii'
1095
+ >>> sim.inputs.metric_weight = 1.0
1096
+ >>> sim.inputs.radius_or_number_of_bins = 5
1097
+ >>> sim.inputs.sampling_strategy = 'Regular'
1098
+ >>> sim.inputs.sampling_percentage = 1.0
1099
+ >>> sim.inputs.fixed_image_mask = 'mask.nii'
1100
+ >>> sim.inputs.moving_image_mask = 'mask.nii.gz'
1101
+ >>> sim.cmdline # doctest: +ALLOW_UNICODE
1102
+ u'MeasureImageSimilarity --dimensionality 3 --masks ["mask.nii","mask.nii.gz"] \
1103
+ --metric MI["T1.nii","resting.nii",1.0,5,Regular,1.0]'
1104
+ """
1105
+ _cmd = 'MeasureImageSimilarity'
1106
+ input_spec = MeasureImageSimilarityInputSpec
1107
+ output_spec = MeasureImageSimilarityOutputSpec
1108
+
1109
+ def _metric_constructor (self ):
1110
+ retval = '--metric {metric}["{fixed_image}","{moving_image}",{metric_weight},' \
1111
+ '{radius_or_number_of_bins},{sampling_strategy},{sampling_percentage}]' \
1112
+ .format (
1113
+ metric = self .inputs .metric ,
1114
+ fixed_image = self .inputs .fixed_image ,
1115
+ moving_image = self .inputs .moving_image ,
1116
+ metric_weight = self .inputs .metric_weight ,
1117
+ radius_or_number_of_bins = self .inputs .radius_or_number_of_bins ,
1118
+ sampling_strategy = self .inputs .sampling_strategy ,
1119
+ sampling_percentage = self .inputs .sampling_percentage ,
1120
+ )
1121
+ return retval
1122
+
1123
+ def _mask_constructor (self ):
1124
+ if self .inputs .moving_image_mask :
1125
+ retval = '--masks ["{fixed_image_mask}","{moving_image_mask}"]' \
1126
+ .format (
1127
+ fixed_image_mask = self .inputs .fixed_image_mask ,
1128
+ moving_image_mask = self .inputs .moving_image_mask ,
1129
+ )
1130
+ else :
1131
+ retval = '--masks "{fixed_image_mask}"' \
1132
+ .format (
1133
+ fixed_image_mask = self .inputs .fixed_image_mask ,
1134
+ )
1135
+ return retval
1136
+
1137
+ def _format_arg (self , opt , spec , val ):
1138
+ if opt == 'metric' :
1139
+ return self ._metric_constructor ()
1140
+ elif opt == 'fixed_image_mask' :
1141
+ return self ._mask_constructor ()
1142
+ return super (MeasureImageSimilarity , self )._format_arg (opt , spec , val )
1143
+
1144
+ def _list_outputs (self ):
1145
+ outputs = self ._outputs ()
1146
+ stdout = runtime .stdout .split ('\n ' )
1147
+ outputs ['similarity' ] = float (stdout )
1148
+ return outputs
0 commit comments