@@ -872,8 +872,30 @@ ants_motion(itk::ants::CommandLineParser * parser)
872
872
873
873
// Get smoothing sigmas
874
874
875
- std::vector<float > sigmas =
876
- parser->ConvertVector <float >(smoothingSigmasOption->GetFunction (currentStage)->GetName ());
875
+ std::string smoothingSigmasString = smoothingSigmasOption->GetFunction (currentStage)->GetName ();
876
+
877
+ bool smoothingSigmasAreInPhysicalUnits = false ;
878
+
879
+ const size_t mmPosition = smoothingSigmasString.find (" mm" );
880
+ const size_t voxPosition = smoothingSigmasString.find (" vox" );
881
+
882
+ if (mmPosition != std::string::npos)
883
+ {
884
+ smoothingSigmasString.replace (mmPosition, 2 , " " );
885
+ smoothingSigmasAreInPhysicalUnits = true ;
886
+ }
887
+ else if (voxPosition != std::string::npos)
888
+ {
889
+ smoothingSigmasString.replace (voxPosition, 3 , " " );
890
+ smoothingSigmasAreInPhysicalUnits = false ;
891
+ }
892
+ else
893
+ {
894
+ smoothingSigmasAreInPhysicalUnits = false ;
895
+ }
896
+
897
+ std::vector<float > sigmas = parser->ConvertVector <float >(smoothingSigmasString);
898
+
877
899
typename AffineRegistrationType::SmoothingSigmasArrayType smoothingSigmasPerLevel;
878
900
smoothingSigmasPerLevel.SetSize (sigmas.size ());
879
901
@@ -890,6 +912,7 @@ ants_motion(itk::ants::CommandLineParser * parser)
890
912
}
891
913
if (verbose)
892
914
std::cout << " smoothing sigmas per level: " << smoothingSigmasPerLevel << std::endl;
915
+ std::cout << " smoothing sigmas in physical space units: " << smoothingSigmasAreInPhysicalUnits << std::endl;
893
916
}
894
917
895
918
// the fixed image is a reference image in 3D while the moving is a 4D image
@@ -1218,6 +1241,7 @@ ants_motion(itk::ants::CommandLineParser * parser)
1218
1241
affineRegistration->SetNumberOfLevels (numberOfLevels);
1219
1242
affineRegistration->SetShrinkFactorsPerLevel (shrinkFactorsPerLevel);
1220
1243
affineRegistration->SetSmoothingSigmasPerLevel (smoothingSigmasPerLevel);
1244
+ affineRegistration->SetSmoothingSigmasAreSpecifiedInPhysicalUnits (smoothingSigmasAreInPhysicalUnits);
1221
1245
affineRegistration->SetMetricSamplingStrategy (metricSamplingStrategy);
1222
1246
affineRegistration->SetMetricSamplingPercentage (samplingPercentage);
1223
1247
affineRegistration->SetMetric (metric);
@@ -1292,6 +1316,7 @@ ants_motion(itk::ants::CommandLineParser * parser)
1292
1316
rigidRegistration->SetNumberOfLevels (numberOfLevels);
1293
1317
rigidRegistration->SetShrinkFactorsPerLevel (shrinkFactorsPerLevel);
1294
1318
rigidRegistration->SetSmoothingSigmasPerLevel (smoothingSigmasPerLevel);
1319
+ rigidRegistration->SetSmoothingSigmasAreSpecifiedInPhysicalUnits (smoothingSigmasAreInPhysicalUnits);
1295
1320
rigidRegistration->SetMetric (metric);
1296
1321
rigidRegistration->SetMetricSamplingStrategy (
1297
1322
static_cast <typename RigidRegistrationType::MetricSamplingStrategyEnum>(metricSamplingStrategy));
@@ -1397,7 +1422,7 @@ ants_motion(itk::ants::CommandLineParser * parser)
1397
1422
displacementFieldRegistration->SetNumberOfLevels (numberOfLevels);
1398
1423
displacementFieldRegistration->SetShrinkFactorsPerLevel (shrinkFactorsPerLevel);
1399
1424
displacementFieldRegistration->SetSmoothingSigmasPerLevel (smoothingSigmasPerLevel);
1400
- displacementFieldRegistration->SetSmoothingSigmasAreSpecifiedInPhysicalUnits (false );
1425
+ displacementFieldRegistration->SetSmoothingSigmasAreSpecifiedInPhysicalUnits (smoothingSigmasAreInPhysicalUnits );
1401
1426
displacementFieldRegistration->SetMetricSamplingStrategy (
1402
1427
static_cast <typename DisplacementFieldRegistrationType::MetricSamplingStrategyEnum>(metricSamplingStrategy));
1403
1428
displacementFieldRegistration->SetMetricSamplingPercentage (samplingPercentage);
@@ -1518,7 +1543,7 @@ ants_motion(itk::ants::CommandLineParser * parser)
1518
1543
displacementFieldRegistration->SetNumberOfLevels (numberOfLevels);
1519
1544
displacementFieldRegistration->SetShrinkFactorsPerLevel (shrinkFactorsPerLevel);
1520
1545
displacementFieldRegistration->SetSmoothingSigmasPerLevel (smoothingSigmasPerLevel);
1521
- displacementFieldRegistration->SetSmoothingSigmasAreSpecifiedInPhysicalUnits (false );
1546
+ displacementFieldRegistration->SetSmoothingSigmasAreSpecifiedInPhysicalUnits (smoothingSigmasAreInPhysicalUnits );
1522
1547
displacementFieldRegistration->SetLearningRate (learningRate);
1523
1548
displacementFieldRegistration->SetConvergenceThreshold (1 .e -8 );
1524
1549
displacementFieldRegistration->SetConvergenceWindowSize (10 );
@@ -1884,7 +1909,9 @@ antsMotionCorrInitializeCommandLineOptions(itk::ants::CommandLineParser * parser
1884
1909
}
1885
1910
1886
1911
{
1887
- std::string description = std::string (" Specify the amount of smoothing at each level." );
1912
+ std::string description =
1913
+ std::string (" Specify the sigma for smoothing at each level. Smoothing may be specified " ) +
1914
+ std::string (" in mm units or voxels with \" AxBxCmm\" or \" AxBxCvox\" . No units implies voxels." );
1888
1915
1889
1916
OptionType::Pointer option = OptionType::New ();
1890
1917
option->SetLongName (" smoothingSigmas" );
0 commit comments