[Insight-users] Compare images by mean square difference

Bill Lorensen bill.lorensen at gmail.com
Thu Jan 29 14:42:06 EST 2009


Your code looks OK. Are you sure that the two images have been filled with data?

On Thu, Jan 29, 2009 at 9:25 AM,  <t_s_80 at gmx.de> wrote:
> Hello,
>
> I simply want to compare two images (without registration) by mean square value. All I have found to do so, is the MeanSquaresImageToImageMetric that is also used for
> registration. Is it correct to use it also in my case?
>
> I wrote a method (you can see below) that get two identical images, apart from the image content (same size, same spacing, same origin).
> It is working, but the results can't be right. The values are very large, even if the content of the images is equal. What is wrong with my method? Did I forget something?
> Or is it wrong to use the Metric this way?
>
> Thanks a lot for your help,
> Marta
>
> --------------------------------------------------------------------------------------------------------------------
>
> void THIS::calculateMeanSquaresErrorBetweenImages( ImageType::Pointer image1, ImageType::Pointer image2 ) {
>
>        /*
>        //This part is actually in the header:
>        int Dimension = 2;
>        typedef unsigned short InputPixelType;
>        typedef unsigned short OutputPixelType;
>        typedef itk::Image< InputPixelType, Dimension > ImageType;
>        typedef itk::Image< OutputPixelType, Dimension > OutputImageType;
>        typedef itk::RescaleIntensityImageFilter< ImageType, OutputImageType > RescaleFilterType;*/
>
>        typedef itk::MeanSquaresImageToImageMetric< OutputImageType, OutputImageType > MetricType;
>        typedef itk::LinearInterpolateImageFunction< OutputImageType > LinearInterpolatorType;
>        typedef itk::CenteredRigid2DTransform< double > TransformType;
>
>        RescaleFilterType::Pointer rescaler1 = RescaleFilterType::New( );
>        RescaleFilterType::Pointer rescaler2 = RescaleFilterType::New( );
>
>        rescaler1->SetOutputMinimum(   0 );
>        rescaler1->SetOutputMaximum( 65535 );
>
>        rescaler2->SetOutputMinimum(   0 );
>        rescaler2->SetOutputMaximum( 65535 );
>
>        rescaler1->SetInput( image1 );
>        rescaler2->SetInput( image2 );
>
>        LinearInterpolatorType::Pointer interpolator = LinearInterpolatorType::New( );
>
>        OutputImageType::Pointer image1 = rescaler1->GetOutput( );
>        OutputImageType::Pointer image2 = rescaler2->GetOutput( );
>
>        rescaler1->Update( );
>        rescaler2->Update( );
>
>        MetricType::Pointer metric = MetricType::New( );
>
>        metric->SetFixedImage( image1 );
>        metric->SetMovingImage( image2  );
>        metric->SetFixedImageRegion( image1->GetLargestPossibleRegion( ) );
>
>        TransformType::Pointer transform = Transform::TransformType::New( );
>        transform->SetIdentity( );
>        metric->SetTransform( transform );
>        metric->SetTransformParameters ( transform->GetParameters( ) );
>        metric->SetInterpolator( interpolator );
>        metric->Initialize( );
>
>        std::cout << "Metrik Value: " << metric->GetValue( transform->GetParameters( ) ) << std::endl;
>
> }
> --
> Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger
> _______________________________________________
> 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