Skip to content

Commit d19e774

Browse files
authored
Merge pull request #3742 from hjmjohnson/add-supports-scales
ENH: Add check if optimizer supports scales
2 parents 7c19c4a + 1fefa3f commit d19e774

File tree

5 files changed

+34
-1
lines changed

5 files changed

+34
-1
lines changed

Modules/Numerics/Optimizers/include/itkLBFGSBOptimizer.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,13 @@ class ITKOptimizers_EXPORT LBFGSBOptimizer : public SingleValuedNonLinearVnlOpti
194194
const std::string
195195
GetStopConditionDescription() const override;
196196

197+
/** Returns false unconditionally because LBFGSBOptimizer does not support using scales. */
198+
bool
199+
CanUseScales() const override
200+
{
201+
return false;
202+
}
203+
197204
protected:
198205
LBFGSBOptimizer();
199206
~LBFGSBOptimizer() override;

Modules/Numerics/Optimizers/include/itkSingleValuedNonLinearVnlOptimizer.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,15 @@ class ITKOptimizers_EXPORT SingleValuedNonLinearVnlOptimizer : public SingleValu
101101
itkGetConstReferenceMacro(CachedDerivative, DerivativeType);
102102
itkGetConstReferenceMacro(CachedCurrentPosition, ParametersType);
103103

104+
/** Returns true if derived optimizer supports using scales.
105+
* For optimizers that do not support scaling, this
106+
* default function is overriden to return false.*/
107+
virtual bool
108+
CanUseScales() const
109+
{
110+
return true;
111+
}
112+
104113
protected:
105114
SingleValuedNonLinearVnlOptimizer();
106115
~SingleValuedNonLinearVnlOptimizer() override;

Modules/Numerics/Optimizersv4/include/itkLBFGSBOptimizerv4.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,13 @@ class ITKOptimizersv4_EXPORT LBFGSBOptimizerv4 : public LBFGSOptimizerBasev4<vnl
170170
* function. */
171171
itkGetConstReferenceMacro(InfinityNormOfProjectedGradient, double);
172172

173+
/** Returns false unconditionally because LBFGSBOptimizerv4 does not support using scales. */
174+
bool
175+
CanUseScales() const override
176+
{
177+
return false;
178+
}
179+
173180
protected:
174181
LBFGSBOptimizerv4();
175182
~LBFGSBOptimizerv4() override;

Modules/Numerics/Optimizersv4/include/itkObjectToObjectOptimizerBase.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,15 @@ class ITK_TEMPLATE_EXPORT ObjectToObjectOptimizerBaseTemplate : public Object
262262
virtual const StopConditionReturnStringType
263263
GetStopConditionDescription() const = 0;
264264

265+
/** Returns true if derived optimizer supports using scales.
266+
* For optimizers that do not support scaling, this
267+
* default function is overriden to return false.*/
268+
virtual bool
269+
CanUseScales() const
270+
{
271+
return true;
272+
}
273+
265274
protected:
266275
/** Default constructor */
267276
ObjectToObjectOptimizerBaseTemplate();

Modules/Registration/RegistrationMethodsv4/include/itkImageRegistrationMethodv4.hxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,8 @@ ImageRegistrationMethodv4<TFixedImage, TMovingImage, TTransform, TVirtualImage,
737737

738738
this->m_Optimizer->SetMetric(this->m_Metric);
739739

740-
if ((this->m_Optimizer->GetScales()).Size() != this->m_OutputTransform->GetNumberOfLocalParameters())
740+
if (this->m_Optimizer->CanUseScales() &&
741+
((this->m_Optimizer->GetScales()).Size() != this->m_OutputTransform->GetNumberOfLocalParameters()))
741742
{
742743
using ScalesType = typename OptimizerType::ScalesType;
743744
ScalesType scales;

0 commit comments

Comments
 (0)