[Insight-users] Image similarity]

Luis Ibanez luis.ibanez at kitware.com
Tue Jul 13 17:44:30 EDT 2004


Hi George,

Please try using the NearestNeighorhood interpolator instead of
the LinearInterpolator.  In that way you should be able to get
closer to the the theoretical values for self-similarity.

Note that you will not get the perfect -1, because the Mutual
Information Metrics can only produce "estimates" of the joint 
probability distributions, so even when computing the metric
for two identical images, the estimation process will result in
values that do not math the theoretical value.


Could you be more specific regarding the "rigid registration app"
that you tried ?  there are actually several of them in ITK.


Thanks


    Luis


-------------------------
George Iordanescu wrote:

> Hi Luis,
> 
> Thank you for your quick reply. Below is the function I wrote and it
> seems to work somehow... I started with 2 3D images whose similarity was
> -0.51411. Also:
> Similarity between fixed image and itself = -1.32591
> Similarity between moving image  and itself = -1.37055
> 
> After rigid registration : 
> Similarity between  moving image and registered image = -0.782605;
> Similarity between fixed image  and registered image = -0.651837 ;
> 
> I am a bit surprised by the self-similarity values for the fixed and
> moving image. Aren't they supposed to be between -1 and 1? 
> 
> Also, the rigid registration app (that uses the same type of metric and
> interpolator as my function) reports  a metric value -0.435078 for the
> first iteration (transform parameters are [0, 0, 0, 0, 0, 0]). This
> value is close to the -0.51411 computed by my function but still a bit
> different. I guess there is some variation in the results provided by
> the metric.
> 
> I do not know as much as I would like about template programming but I
> will try to write a class templated over the Metric type and the
> Interpolator type.
> 
> Thank you.
> 
> George
> 
> -------------defined in DataManager class-----------
>   typedef signed long                   ImagePixelType;
>   typedef itk::Image<ImagePixelType,3>  ImageType;
>   typedef ImageType::Pointer            ImagePointer ;
> ----------------------------------------------------
> 
> double Compute_3DImages_Similarity(DataManager::ImagePointer image1,
> DataManager::ImagePointer image2)
> {
> 
>   /**  Type of the metric. */
>   //typedef itk::ImageToImageMetric< ImageType, ImageType >      
> MetricType;
>   typedef itk::MattesMutualInformationImageToImageMetric< ImageType,
> ImageType >       MetricType;
>   typedef itk::LinearInterpolateImageFunction< ImageType, double >
> InterpolatorType ;
>   typedef  itk::IdentityTransform< double, 3 >      TransformType;
>   typedef MetricType::Pointer             MetricPointer;
> 
>   /**  Type of the Transform . */
>   typedef  TransformType::Pointer         TransformPointer;
>   typedef  MetricType::ParametersType     ParametersType;
>   typedef  InterpolatorType::Pointer      InterpolatorPointer;
> 
>   TransformPointer  m_Transform = TransformType::New();
>   MetricType::Pointer m_Metric =  MetricType::New();
>   InterpolatorPointer m_Interpolator = InterpolatorType::New();
>   m_Metric->SetMovingImage( image1 );
>   m_Metric->SetFixedImage( image2 );
>   m_Metric->SetTransform( m_Transform );
>   m_Metric->SetInterpolator( m_Interpolator );
>   m_Metric->SetFixedImageRegion( image1->GetLargestPossibleRegion() );
> 
>   const unsigned int dummyspaceDimension =
>     m_Metric->GetNumberOfParameters();
>   ParametersType dummyPosition(dummyspaceDimension) ;
>   for( unsigned int i=0; i<dummyspaceDimension; i++){
>       dummyPosition[i] = 0;
>   }
> 
>   m_Metric->Initialize();
> 
>   double simi = m_Metric->GetValue(dummyPosition);
>   return simi;
> }
> 
> On Mon, 2004-07-12 at 19:17, Luis Ibanez wrote:
> 
>>>Hi George,
>>>
>>>You can use any of the current ImageToImage metrics,
>>>
>>>http://www.itk.org/Insight/Doxygen/html/group__RegistrationMetrics.html
>>>
>>>and simply set
>>>
>>>   Interpolator = NearestNeighborhoodInterpolator
>>>   Transform    = IdentityTransform
>>>
>>>If you find annoying to have to do this every time,
>>>you could write a class templated over the Metric
>>>type, that will do this initializations for you.
>>>
>>>This new class will have a GetValue() method without
>>>parameters that will simply invoke the GetValue() method
>>>of the real metric with a dummy array of parameters.
>>>You can use a dummy array because the IdentityTransform
>>>do not require parameters.
>>>
>>>In this way you can easily switch among any of the
>>>twelve or so image metrics in ITK and dont have to
>>>worry about the extra componets required for integration
>>>with the registration framework.
>>>
>>>
>>>You may want to contribute such a class to the toolkit
>>>since it may prove to be useful to other ITK users.
>>>
>>>
>>>Please let us now if you need any assistance for
>>>writing this new class.
>>>
>>>
>>>    Thanks
>>>
>>>
>>>       Luis
>>>
>>>
>>>
>>>--------------------------
>>>George Iordanescu wrote:
>>>
>>>
>>>>Hello everybody,
>>>>
>>>>I would like to compute a number that describes the similarity degree
>>>>between two images. I am thinking about a simple class that should have
>>>>two methods SetImage1/2 and then ComputeSimilarity().
>>>>
>>>>I was hoping a child of ImageToImageMetric would do, but it seems to
>>>>need more inputs than just two images. Apparently, after setting the
>>>>images (and the Interpolator and the (identity) transform),  I cannot
>>>>call GetValue without passing some parameters that make little sense in
>>>>the context of just two images. Is there any other class (filter) that
>>>>will compute the similarity between two images? Is there any example
>>>>about how to use a ImageToImageMetric for such a purpose?
>>>>
>>>>Such a class could be very useful when trying to find the best set of
>>>>registration parameters. One could register an image using multiple sets
>>>>of parameters and then we could select the best set by looking at the
>>>>similarity between the registered image and the fixed image.
>>>>
>>>>Any suggestion will be highly appreciated.
>>>>
>>>>Thank you.
>>>>
>>>>George
>>>>
>>>>_______________________________________________
>>>>Insight-users mailing list
>>>>Insight-users at itk.org
>>>>http://www.itk.org/mailman/listinfo/insight-users
>>>>
>>>
>>>
>>>
>>>_______________________________________________
>>>Insight-users mailing list
>>>Insight-users at itk.org
>>>http://www.itk.org/mailman/listinfo/insight-users
>>>
> 
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 





More information about the Insight-users mailing list