*
===================================================*/
+#include "itkVectorResampleImageFilter.h"
+#include "clitkConvertBLUTCoeffsToVFFilter.h"
namespace clitk
{
typedef itk::Image<PixelType, Dimension> OutputImageType;
typedef itk::Vector<float, Dimension> DisplacementType;
typedef itk::Image<DisplacementType, Dimension> DeformationFieldType;
-
-
+
// Read the input
typedef itk::ImageFileReader<InputImageType> InputReaderType;
typename InputReaderType::Pointer reader = InputReaderType::New();
reader->SetFileName( m_InputFileName);
reader->Update();
typename InputImageType::Pointer input= reader->GetOutput();
-
- //Read the deformation field
- typedef itk::ImageFileReader<DeformationFieldType> DeformationFieldReaderType;
- typename DeformationFieldReaderType::Pointer deformationFieldReader= DeformationFieldReaderType::New();
- deformationFieldReader->SetFileName(m_ArgsInfo.vf_arg);
- deformationFieldReader->Update();
- typename DeformationFieldType::Pointer deformationField =deformationFieldReader->GetOutput();
+
+ typename DeformationFieldType::Pointer deformationField;
+ if (m_ArgsInfo.coeff_given) {
+ typedef ConvertBLUTCoeffsToVFFilter<DeformationFieldType> FilterType;
+ typename FilterType::Pointer filter = FilterType::New();
+ filter->SetInputFileName(m_ArgsInfo.coeff_arg);
+ filter->SetLikeFileName(m_InputFileName);
+ filter->SetVerbose(m_Verbose);
+ filter->Update();
+ deformationField = filter->GetOutput();
+ }
+ else {
+ //Read the deformation field
+ typedef itk::ImageFileReader<DeformationFieldType> DeformationFieldReaderType;
+ typename DeformationFieldReaderType::Pointer deformationFieldReader= DeformationFieldReaderType::New();
+ deformationFieldReader->SetFileName(m_ArgsInfo.vf_arg);
+ deformationFieldReader->Update();
+ deformationField =deformationFieldReader->GetOutput();
+ }
// Intensity interpolator
typedef clitk::GenericVectorInterpolator<args_info_clitkWarpImage, DeformationFieldType, double> GenericInterpolatorType;
resampler =itk::VectorResampleImageFilter<DeformationFieldType, DeformationFieldType >::New();
resampler->SetInput(deformationField);
resampler->SetOutputSpacing(deformationField->GetSpacing());
+ resampler->SetOutputDirection(deformationField->GetDirection());
resampler->SetSize(newSize);
resampler->SetOutputOrigin(input->GetOrigin());
resampler->SetInterpolator(genericInterpolator->GetInterpolatorPointer());
// -------------------------------------------
// Spacing like input
// -------------------------------------------
- else {
+ else if (!m_ArgsInfo.coeff_given) {
// Get size
typename DeformationFieldType::SizeType newSize;
for (unsigned int i=0 ; i <Dimension; i++)
resampler =itk::VectorResampleImageFilter<DeformationFieldType, DeformationFieldType >::New();
resampler->SetInput(deformationField);
resampler->SetOutputSpacing(input->GetSpacing());
+ resampler->SetOutputDirection(deformationField->GetDirection());
resampler->SetSize(newSize);
resampler->SetOutputOrigin(input->GetOrigin());
resampler->SetInterpolator(genericInterpolator->GetInterpolatorPointer());
//Backward mapping
typedef itk::WarpImageFilter<InputImageType, InputImageType, DeformationFieldType> BackwardWarpFilterType;
typename BackwardWarpFilterType::Pointer backwardWarpFilter= BackwardWarpFilterType::New();
- backwardWarpFilter->SetDeformationField( deformationField );
+ backwardWarpFilter->SetDisplacementField( deformationField );
backwardWarpFilter->SetEdgePaddingValue( static_cast<PixelType>(m_ArgsInfo.pad_arg) );
backwardWarpFilter->SetOutputSpacing( deformationField->GetSpacing() );
backwardWarpFilter->SetOutputOrigin( input->GetOrigin() );
backwardWarpFilter->SetOutputSize( deformationField->GetLargestPossibleRegion().GetSize() );
+ backwardWarpFilter->SetOutputDirection( input->GetDirection() );
typename itk::VectorResampleImageFilter<DeformationFieldType, DeformationFieldType >::Pointer
resampler =itk::VectorResampleImageFilter<DeformationFieldType, DeformationFieldType >::New();
backwardWarpFilter->SetInterpolator(genericInterpolator->GetInterpolatorPointer());