#include "itkAffineTransform.h"
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkLinearInterpolateImageFunction.h"
#include "itkMatrix.h"
#include "itkNIFTIImageIO.h"
#include "itkNIFTIImageIOFactory.h"
#include "itkResampleImageFilter.h"
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
// if (argc != 5)
// {
// std::cerr << "Usage: " << std::endl;
// std::cerr << argv[0];
// std::cerr << " <InputFileName> <OutputFileName>";
// std::cerr << " <numberOfIterations> <timeStep> <conductance>";
// std::cerr << std::endl;
// return EXIT_FAILURE;
//}
const char *inputfilename = argv[1];
const char *referencefilename = argv[2];
const char *transformfilename = argv[3];
const char *outputfilename = argv[4];
constexpr unsigned int Dimension = 3;
using PixelType = unsigned char;
using ImageType = itk::Image<PixelType, Dimension>;
using ScalarType = double;
using ReaderType = itk::ImageFileReader<ImageType>;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName("D:\\ITK\\Test\\Cartilage.nii");
try
{
reader->Update();
}
catch (itk::ExceptionObject &err)
{
std::cerr << "ExceptionObject caught !" << std::endl;
std::cerr << err << std::endl;
}
// std::cerr << reader->GetOutputs();
// Since the goal of the example is to catch the exception,
// we declare this a success.
using ReaderType = itk::ImageFileReader<ImageType>;
ReaderType::Pointer reader2 = ReaderType::New();
reader2->SetFileName("D:\\ITK\\Test\\CTA.nii");
reader2->Update();
// Since the goal of the example is to catch the exception,
// the example fails if it is not caught.
ImageType::Pointer inputImage = reader->GetOutput();
ImageType::Pointer referenceImage = reader2->GetOutput();
ImageType::RegionType region = inputImage->GetLargestPossibleRegion();
ImageType::SizeType size = region.GetSize();
cout << size << endl;
ImageType::SpacingType spacing = inputImage->GetSpacing();
cout << spacing << endl;
using AffineTransformType = itk::AffineTransform<double, Dimension>;
AffineTransformType::Pointer affineTransform = AffineTransformType::New();
using MatrixType = itk::Matrix<double, Dimension, Dimension>;
using VectorType = itk::Vector<double, Dimension>;
MatrixType M;
VectorType N;
double data[Dimension + 1][Dimension + 1];
int i = 0, j = 0, count = 16;
ifstream filestream;
filestream.open(argv[3], ios::in);
while (!filestream.eof() && count > 0)
{
count--;
double tmp = 0;
filestream >> tmp;
if (i == 4)
{
i = 0;
j = j + 1;
}
data[j][i] = tmp;
i = i + 1;
}
filestream.close();
for (int i = 0; i < Dimension; i++)
for (int j = 0; j < Dimension; j++)
{
M(i, j) = data[i][j];
cout << M(i, j) << endl;
// M(i, j) = 0;
}
for (int i = 0; i < Dimension; i++)
{
N[i] = data[i][Dimension];
// N[i] = 0;
}
AffineTransformType::MatrixType Matrix = affineTransform->GetMatrix();
affineTransform->SetMatrix(M);
//affineTransform->SetOffset(N);
cout << affineTransform->GetMatrix() << " " << endl;
using NearestNeighborInterpolatorType = itk::LinearInterpolateImageFunction <ImageType, ScalarType>;
NearestNeighborInterpolatorType::Pointer interpolator = NearestNeighborInterpolatorType::New();
using ResampleFilterType = itk::ResampleImageFilter<ImageType, ImageType>;
ResampleFilterType::Pointer resampleFilter = ResampleFilterType::New();
resampleFilter->SetInput(inputImage);
resampleFilter->SetTransform(affineTransform);
resampleFilter->SetInterpolator(interpolator);
resampleFilter->SetSize(size);
resampleFilter->SetOutputOrigin(inputImage->GetOrigin());
resampleFilter->SetOutputSpacing(spacing);
cout << resampleFilter->GetOutput() << "output" << endl;
using WriterType = itk::ImageFileWriter<ImageType>;
WriterType::Pointer writer = WriterType::New();
writer->SetFileName(outputfilename);
writer->SetInput(resampleFilter->GetOutput());
try
{
writer->Update();
}
catch (itk::ExceptionObject &error)
{
std::cerr << "Error: " << error << std::endl;
return EXIT_FAILURE;
}
cout << "aaa" << endl;
return 0;
}
this is my code with empty output ? what’s wrong with the code ? I read a nii form input and need to resample it with affinetransform,HOWEVER, I get a empty output