#ifndef clitkInvertVFGenericFilter_txx
#define clitkInvertVFGenericFilter_txx
+#include "itkVectorResampleImageFilter.h"
+#include "clitkConvertBLUTCoeffsToVFFilter.h"
+
/* =================================================
* @file clitkInvertVFGenericFilter.txx
* @author
typename InputReaderType::Pointer reader = InputReaderType::New();
reader->SetFileName( m_InputFileName);
reader->Update();
- typename InputImageType::Pointer input= reader->GetOutput();
+ typename InputImageType::Pointer input = reader->GetOutput();
// Filter
typename OutputImageType::Pointer output;
// Create the InvertVFFilter
typedef clitk::InvertVFFilter<InputImageType,OutputImageType> FilterType;
typename FilterType::Pointer filter =FilterType::New();
- filter->SetInput(input);
- typename FilterType::SpacingType spacing = input->GetSpacing();
- typename FilterType::SizeType size = input->GetLargestPossibleRegion().GetSize();
if (m_ArgsInfo.like_given) {
+ typename FilterType::SpacingType spacing;
+ typename FilterType::SizeType size;
itk::ImageIOBase::Pointer header = readImageHeader(m_ArgsInfo.like_arg);
for(unsigned int i=0; i<InputImageType::ImageDimension; i++) {
size[i] = header->GetDimensions(i);
spacing[i] = header->GetSpacing(i);
}
+
+ typedef itk::VectorResampleImageFilter<InputImageType, OutputImageType> ResampleFilterType;
+ typename ResampleFilterType::Pointer resampler = ResampleFilterType::New();
+ resampler->SetInput(input);
+ resampler->SetOutputOrigin(input->GetOrigin());
+ resampler->SetOutputDirection(input->GetDirection());
+ resampler->SetOutputSpacing(spacing);
+ resampler->SetSize(size);
+ resampler->Update();
+ spacing = resampler->GetOutput()->GetSpacing();
+ size = resampler->GetOutput()->GetLargestPossibleRegion().GetSize();
+ filter->SetInput(resampler->GetOutput());
}
- std::cout << spacing << size << std::endl;
- filter->SetOutputSpacing(spacing);
- filter->SetOutputSize(size);
+ else
+ filter->SetInput(input);
filter->SetVerbose(m_Verbose);
- if (m_ArgsInfo.threads_given) filter->SetNumberOfThreads(m_ArgsInfo.threads_arg);
+ if (m_ArgsInfo.threads_given) {
+#if ITK_VERSION_MAJOR <= 4
+ filter->SetNumberOfThreads(m_ArgsInfo.threads_arg);
+#else
+ filter->SetNumberOfWorkUnits(m_ArgsInfo.threads_arg);
+#endif
+ }
if (m_ArgsInfo.pad_given) {
PixelType pad;
if (m_ArgsInfo.pad_given != (pad.GetNumberOfComponents()) )
}
case 1: {
- // Create the InverseDeformationFieldFilter
-#if ITK_VERSION_MAJOR >= 4
- typedef itk::InverseDisplacementFieldImageFilter<InputImageType,OutputImageType> FilterType;
+ // Create the InvertVFFilter
+ typedef clitk::InvertVFFilter<InputImageType,OutputImageType> FilterType;
+ typename FilterType::Pointer filter =FilterType::New();
+ if (m_ArgsInfo.like_given) {
+ typedef ConvertBLUTCoeffsToVFFilter<InputImageType> VFFilterType;
+ typename VFFilterType::Pointer vf_filter = VFFilterType::New();
+ vf_filter->SetInputFileName(m_InputFileName);
+ vf_filter->SetLikeFileName(m_ArgsInfo.like_arg);
+ vf_filter->SetVerbose(m_Verbose);
+ vf_filter->Update();
+ filter->SetInput(vf_filter->GetOutput());
+ }
+
+ filter->SetVerbose(m_Verbose);
+ if (m_ArgsInfo.threads_given) {
+#if ITK_VERSION_MAJOR <= 4
+ filter->SetNumberOfThreads(m_ArgsInfo.threads_arg);
#else
- typedef itk::InverseDeformationFieldImageFilter<InputImageType,OutputImageType> FilterType;
+ filter->SetNumberOfWorkUnits(m_ArgsInfo.threads_arg);
#endif
+ }
+ if (m_ArgsInfo.pad_given) {
+ PixelType pad;
+ if (m_ArgsInfo.pad_given != (pad.GetNumberOfComponents()) )
+ pad.Fill(m_ArgsInfo.pad_arg[0]);
+ else
+ for(unsigned int i=0; i<Dimension; i++)
+ pad[i]=m_ArgsInfo.pad_arg[i];
+ }
+ filter->SetThreadSafe(m_ArgsInfo.threadSafe_flag);
+ filter->Update();
+ output=filter->GetOutput();
+
+ break;
+ }
+
+ case 2: {
+ // Create the InverseDeformationFieldFilter
+ typedef itk::InverseDisplacementFieldImageFilter<InputImageType,OutputImageType> FilterType;
typename FilterType::Pointer filter =FilterType::New();
filter->SetInput(input);
filter->SetOutputOrigin(input->GetOrigin());
break;
}
+
}
// Output