Skip to content
Snippets Groups Projects
Commit 9849c78c authored by Kasper Marstal's avatar Kasper Marstal
Browse files

ENH: ELASTIX-1 Add ITK registration test

parent 84c51cc4
No related branches found
No related tags found
No related merge requests found
......@@ -3,27 +3,84 @@
#include "elxDataManager.h"
#include "gtest/gtest.h"
#include "itkImageRegistrationMethod.h"
#include "itkTranslationTransform.h"
#include "itkMeanSquaresImageToImageMetric.h"
#include "itkLinearInterpolateImageFunction.h"
#include "itkRegularStepGradientDescentOptimizer.h"
#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkResampleImageFilter.h"
#include "itkCastImageFilter.h"
class itkRegistration : public ::testing::Test {
public:
virtual void SetUp()
{
DataManager dataManager;
typedef itk::ImageFileReader< ImageType > ReaderType;
// TODO: Loading images here result in segfault
}
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName( dataManager.GetInput( "BrainProtonDensitySliceR10X13Y17.png" ) );
inputImage = reader->GetOutput();
typedef itk::Image< unsigned short, 2 > ImageType;
reader->SetFileName( dataManager.GetBaseline( "BrainProtonDensitySlice.png" ) );
baselineImage = reader->GetOutput();
}
typedef itk::ImageFileReader< ImageType > FixedImageReaderType;
typedef itk::ImageFileReader< ImageType > MovingImageReaderType;
FixedImageReaderType::Pointer fixedImageReader;
MovingImageReaderType::Pointer movingImageReader;
typedef itk::Image< unsigned int, 2 > ImageType;
ImageType::Pointer inputImage;
ImageType::Pointer baselineImage;
};
TEST_F( itkRegistration, Affine2D )
{
ASSERT_TRUE( true );
TEST_F( itkRegistration, ImageRegistration3 )
{
typedef itk::TranslationTransform< double, ImageType::ImageDimension > TransformType;
typedef itk::RegularStepGradientDescentOptimizer OptimizerType;
typedef itk::LinearInterpolateImageFunction< ImageType, double > InterpolatorType;
typedef itk::ImageRegistrationMethod< ImageType, ImageType > RegistrationType;
typedef itk::MeanSquaresImageToImageMetric< ImageType, ImageType > MetricType;
TransformType::Pointer transform = TransformType::New();
OptimizerType::Pointer optimizer = OptimizerType::New();
InterpolatorType::Pointer interpolator = InterpolatorType::New();
RegistrationType::Pointer registration = RegistrationType::New();
MetricType::Pointer metric = MetricType::New();
registration->SetMetric( metric );
registration->SetOptimizer( optimizer );
registration->SetTransform( transform );
registration->SetInterpolator( interpolator );
FixedImageReaderType::Pointer fixedImageReader = FixedImageReaderType::New();
MovingImageReaderType::Pointer movingImageReader = MovingImageReaderType::New();
DataManager::Pointer dataManager = DataManager::New();
fixedImageReader->SetFileName( dataManager->GetInputFullPath( "BrainProtonDensitySlice.png" ) );
movingImageReader->SetFileName( dataManager->GetInputFullPath( "BrainProtonDensitySliceR10X13Y17.png" ) );
registration->SetFixedImage( fixedImageReader->GetOutput() );
registration->SetMovingImage( movingImageReader->GetOutput() );
fixedImageReader->Update(); // This is needed to make the BufferedRegion valid.
registration->SetFixedImageRegion( fixedImageReader->GetOutput()->GetBufferedRegion() );
typedef RegistrationType::ParametersType ParametersType;
ParametersType initialParameters( transform->GetNumberOfParameters() );
initialParameters[0] = 0.0; // Initial offset in mm along X
initialParameters[1] = 0.0; // Initial offset in mm along Y
registration->SetInitialTransformParameters( initialParameters );
optimizer->SetMaximumStepLength( 4.00 );
optimizer->SetMinimumStepLength( 0.01 );
optimizer->SetNumberOfIterations( 200 );
optimizer->MaximizeOff();
EXPECT_NO_THROW( registration->Update() );
RecordProperty( "MetricValue", optimizer->GetValue() );
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment