#include "elastixlib.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkMetaImageIOFactory.h"
#include "itkParameterFileParser.h"
#include <iostream>
#include <itkDataObject.h>
#include <vector>
int main() {
const unsigned int Dimension = 3;
typedef float PixelType;
typedef itk::Image<PixelType, Dimension> ImageType;
typedef itk::ImageFileReader<ImageType> ReaderType;
ReaderType::Pointer fixReader = ReaderType::New();
ReaderType::Pointer movReader = ReaderType::New();
fixReader->SetFileName(
"/storage/Users/onder/repo/appcore/examples/elastix/ct.mha");
movReader->SetFileName(
"/storage/Users/onder/repo/appcore/examples/elastix/cbct.mha");
try {
fixReader->Update();
movReader->Update();
} catch (itk::ExceptionObject &ex) {
std::cerr << "Error: " << ex.what() << std::endl;
return -1;
}
using namespace elastix;
typedef ELASTIX::ParameterMapType RegistrationParametersType;
typedef itk::ParameterFileParser ParserType;
ParserType::Pointer file_parser = ParserType::New();
file_parser->SetParameterFileName("/storage/Users/onder/repo/appcore/"
"examples/elastix/Par0005.MI.rigid.txt");
try {
file_parser->ReadParameterFile();
} catch (itk::ExceptionObject &ex) {
std::cerr << "Error: " << ex.what() << std::endl;
return -1;
}
RegistrationParametersType parameters = file_parser->GetParameterMap();
typedef std::vector<RegistrationParametersType>
RegistrationParametersContainerType;
ELASTIX *elastix = new ELASTIX();
int error = 0;
try {
error = elastix->RegisterImages(
static_cast<typename itk::DataObject::Pointer>(fixReader->GetOutput()),
static_cast<typename itk::DataObject::Pointer>(movReader->GetOutput()),
parameters,
"/storage/Users/onder/repo/appcore/"
"examples/elastix/build",
true, true, nullptr, nullptr);
} catch (itk::ExceptionObject &ex) {
std::cerr << "Error: " << ex.what() << std::endl;
return -1;
}
if (error == 0) {
if (elastix->GetResultImage().IsNotNull()) {
std::cout << "Ready to write output image" << std::endl;
ImageType *output_image =
static_cast<ImageType *>(elastix->GetResultImage().GetPointer());
itk::MetaImageIOFactory::RegisterOneFactory();
typedef itk::ImageFileWriter<ImageType> WriterType;
WriterType::Pointer writer = WriterType::New();
writer->SetFileName(
"/storage/Users/onder/repo/appcore/examples/elastix/result.mhd");
writer->SetInput(output_image);
writer->SetUseCompression(false);
try {
writer->Update();
} catch (itk::ExceptionObject &e) {
std::cerr << "Error: " << e.what() << std::endl;
}
}
}
return 0;
}