[ITK] Problem with normalized mutual information
    Constantinus Spanakis 
    c.spanakis83 at gmail.com
       
    Fri Oct  7 18:48:22 EDT 2016
    
    
  
Hello I tried to modify the MutualInformationImageToImageFilter example and
tried to make it read images and calculate their normalized mutual
informaion. Here is the code:
#include "itkMutualInformationImageToImageMetric.h"
#include "itkRandomImageSource.h"
#include "itkTranslationTransform.h"
#include"itkCenteredRigid2DTransform.h"
#include "itkLinearInterpolateImageFunction.h"
#include"itkImageFileReader.h"
#include"itkNormalizedMutualInformationHistogramImageToImageMetric.h"
typedef itk::Image< unsigned char, 2>  ImageType;
//typedef itk::Image< float, 2> ImageType;
int main( int argc, char *argv[] )
{
const    unsigned int    ImageDimension = 2;
typedef  signed short    PixelType;
typedef itk::Image<PixelType, ImageDimension> FixedImage;
typedef itk::Image<PixelType, ImageDimension> MovingImage;
typedef itk::ImageFileReader<FixedImage> FixedImageTypeReader;
typedef itk::ImageFileReader<MovingImage> MovingImageTypeReader;
FixedImageTypeReader::Pointer fixedreader = FixedImageTypeReader::New();
MovingImageTypeReader::Pointer movingreader = MovingImageTypeReader::New();
fixedreader->SetFileName(argv[1]);
movingreader->SetFileName(argv[2]);
fixedreader->Update();
movingreader->Update();
FixedImage::Pointer fixedImage = fixedreader->GetOutput();
MovingImage::Pointer movingImage = movingreader->GetOutput();
  typedef itk::TranslationTransform<double, 2> TranslationTransformType; //
This cannot be float for some reason?
  TranslationTransformType::Pointer transform =
TranslationTransformType::New();
  /*typedef itk::MutualInformationImageToImageMetric<FixedImage,
MovingImage >    MetricType;*/
  typedef
itk::NormalizedMutualInformationHistogramImageToImageMetric<FixedImage,
MovingImage> MetricType;
  MetricType::Pointer metric = MetricType::New();
  metric->SetTransform(transform);
  metric->SetFixedImageRegion(fixedImage->GetLargestPossibleRegion());
  MetricType::HistogramType::SizeType histogramSize;
  histogramSize.SetSize(2);
  histogramSize[0] = 64;
  histogramSize[1] = 64;
  metric->SetHistogramSize(histogramSize);
  const unsigned int numberOfParameters =
transform->GetNumberOfParameters();
  typedef MetricType::ScalesType ScalesType;
  ScalesType scales(numberOfParameters);
  scales.Fill(1.0);
  metric->SetDerivativeStepLengthScales(scales);
  metric->SetFixedImage(fixedImage);
  metric->SetMovingImage(movingImage);
  metric->SetFixedImageRegion(fixedImage->GetLargestPossibleRegion());
  itk::LinearInterpolateImageFunction<MovingImage, double>::Pointer
interpolator = itk::LinearInterpolateImageFunction<MovingImage,
double>::New();
  interpolator->SetInputImage(fixedImage);
  metric->SetInterpolator(interpolator);
  TranslationTransformType::ParametersType parameters;
  parameters.SetSize(2);
  parameters.Fill(0);
  std::cout << "parameters: " << parameters << std::endl;
  printf("before problem\n");
  MetricType::MeasureType value = metric->GetValue(parameters);
  printf("after problem\n");
  std::cout << "Value: " << value << std::endl;
  return EXIT_SUCCESS;
}
The problem is that every time I call metric->GetValue(parameters); the
programme crashes. What could be the problem???
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/community/attachments/20161008/dcb8d137/attachment.html>
    
    
More information about the Community
mailing list