[Insight-developers] Re: Name of new class : Optimization & Refactoring of Image Registration : Backward / Forward compatibility.

Luis Ibanez luis.ibanez at kitware.com
Thu Jul 19 10:50:17 EDT 2007


Hi Bill,

You are right,
the class name is not following ITK coding style.

I'll rename them,..
we just need to agree in a good new name.
(more below on what could be a good name).


---

For the background:

These files are related to the NAC effort the Stephen
is leading for optimizing the image registration
framework of ITK. In particular for taking advantage
of multi-processor platforms.

These two files are the bridge-head for starting to
introduce the classes that support the new API of the
optimized Metrics, while still maintaining backwards
compatibility with existing components of the image
registration framework.


The final purpose of the files:

              itkOptTransform.h
              itkOptTransform.txx

in Insight/Code/Review

is to replace the current files:

             itkTransform.h
             itkTransform.txx

in Insight/Code/Common


These new version should be able to operate in a thread-safe
manner and interact with the optimized versions of Image Metrics
that Stephen has developed.

Currently we swap the new files and current files by using the
CMake Advanced option:


          ITK_USE_OPTIMIZED_REGISTRATION_METHODS

and by having conditional #ifdef in the itkTransform to
#include itkOptTransform files when the CMake variable above
is turned on.

The Nightly builds of zion.kitware (GCC 4.1) are going to be
submitted with this flag ON.


---


Renaming the files is not a problem, However, to make honor to
what the change actually is, we probably should name them as

             itkThreadSafeTransform.h
             itkThreadSafeTransform.txx

rather than

             itkOptimizedTransform.h
             itkOptimizedTransform.txx

since these transform are simply offering thread-safe versions of
the methods

             GetJacobian()
             TransformPoint()
             TransformVector()


instead of offering "faster" or "optimized" version of these
methods.


The classes that are actually going to be optimized are the 
ImageMetrics, Interpolators and the BSplineDeformableTransform.


The previous API of the Transform method was:

           GetJacobian( itkPoint )
           TransformPoint( itkPoint )
           TransformVector( itkVector )
           TransformVector( vnlVector )
           TransformVector( itkCovariantVector )

The new API is

           GetJacobian( itkPoint, threadID )
           TransformPoint( itkPoint, threadID )
           TransformVector( itkVector, threadID )
           TransformVector( vnlVector, threadID )
           TransformVector( itkCovariantVector, threadID )

The motivation for adding the new API is that some transforms
use and modify member variabless during the execution of the
methods above, and that made them non-thread-safe.



The current challenge is to make sure that Metrics that use
the new API can interact with transforms that use the old
API, and that Metrics that use the old API can interact with
Transforms using the new API.


This is work in progress.  Any suggestions on how to make
a smoother introduction of the new classes will be greatly
appreciated.


   Thanks


     Luis



=======================
Bill Lorensen wrote:
> Luis,
>  
> Now I see how this will be used. I looked at the rest of your checkins. 
> However, I still think the class should be renamed.
>  
> Bill
> 
>  
> On 7/19/07, *Bill Lorensen* <bill.lorensen at gmail.com 
> <mailto:bill.lorensen at gmail.com>> wrote:
> 
>     Luis,
>      
>     I noticed a new class today called itkOptTransfrom. In general, we
>     don't use abbreviations in itk. Shouldn't it be called
>     itkOptimizedTransform? Also, in the header, Self is still defined as
>     Transform. Is the intent to replace itkTransform with this class?
>      
>     Bill
>      
> 
> 


More information about the Insight-developers mailing list