Regularization in ITK


I’m working on B-Spline registration. I found the some of the moving images are distorted too much although that do lead to a lower cost function. I think the standard way to deal with these kind of problem is adding regularization term to the cost function. However, I’ve checked the document and doxygen and I didn’t find related resources.

I would like to ask, does ITK provide function/class for regularization? or do I need (is it possible) to write new classes base on ITK to do it?


Hi @HsuehWen,

Welcome to ITK!

Yes, regularization is available. For more details, see these two articles:

Hope this helps,

1 Like

Hi @matt.mccormick,

Thanks for your reply!
I believe your answer is also related to regularization, but what I’m familiar with is directly add a regularization term in the cost function (like this form). Does ITK support this kind of regularization?

An alternative question might be : may I add regularization by do some update to my current code? Or do I need to make some non-trivial modification like change the registration classes/algorithm?
The classes I’m using now are

  • ImageRegistrationMethodv4
  • CorrelationImageToImageMetricv4
  • RegularStepGradientDescentOptimizerv4
  • BSplineTransform

Thanks a lot,

Hi HsuehWen,

There is an explicit class for this type of regularization term, itk::VariationalRegistrationRegularizer, which has implementations for

  • itk::VariationalRegistrationCurvatureRegularizer
  • itk::VariationalRegistrationDiffusionRegularizer
  • itk::VariationalRegistrationElasticRegularizer
  • itk::VariationalRegistrationGaussianRegularizer

These classes are part of the VariationalRegistration module / framework, which can be enabled in your ITK build by setting:


in your CMake configuration.

For more information, see the Insight Journal article, A Flexible Variational Registration Framework.



Thanks Matt!

1 Like

Hello, are these methods VariationalRegistration...Regularizer also avalaible in SimpleITK?

This remote module is not currently available in SimpleITK.

You will have to download and compile ITK in C++ to utilizes this remote module.

well, that is what I was thinking because I could not find it in SimpleITK documentation… and is there a perceptive that it will added to SimpleITK?

I have not used them before, and I am not sure of their general usability. I quickly glanced at them and they appear to have a similar interface as the Demons:

To add a new filter to SimpleITK it is just a matter of create a JSON filter description for it. The demons now would be a good starts:

1 Like