Failed to write image in to the file

16 views
Skip to first unread message

Onder Nazim Onak

unread,
Dec 30, 2022, 5:21:56 AM12/30/22
to elastix-imageregistration
I have been getting the following ITK error when I try to write the Result image into the file

Error: InsightToolkit-5.2.1/lib/include/ITK-5.2/itkMacro.h:1342:
ITK ERROR: Failed dynamic cast to PN3itk5ImageIfLj3EEE object type = Image


Here is my whole code for registration

#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;
}
Reply all
Reply to author
Forward
0 new messages