#if ITK_VERSION_MAJOR < 4
#include "itkVnlFFTRealToComplexConjugateImageFilter.h"
#include "itkVnlFFTComplexConjugateToRealImageFilter.h"
#else
#endif
#if ITK_VERSION_MAJOR < 4
#include "itkRealAndImaginaryToComplexImageFilter.h"
#else
#endif
int main(int argc, char*argv[])
{
const unsigned int Dimension = 2;
typedef float PixelType;
if( argc < 3 )
{
std::cerr << "Missing Parameters " << std::endl;
std::cerr << "Usage: " << argv[0];
std::cerr << " FixedImage MovingImage"<< std::endl;;
return EXIT_FAILURE;
}
std::string fixedImageFilename = argv[1];
std::string movingImageFilename = argv[2];
fixedImageReader->SetFileName( fixedImageFilename );
fixedImageReader->Update();
movingImageReader->SetFileName( movingImageFilename );
movingImageReader->Update();
fixedFFTShiftFilter->SetInput(fixedImageReader->GetOutput());
fixedFFTShiftFilter->Update();
movingFFTShiftFilter->SetInput(movingImageReader->GetOutput());
movingFFTShiftFilter->Update();
#if ITK_VERSION_MAJOR < 4
typedef itk::VnlFFTRealToComplexConjugateImageFilter< FloatImageType > FFTFilterType;
#else
#endif
fixedFFTFilter->SetInput( fixedFFTShiftFilter->GetOutput() );
fixedFFTFilter->Update();
movingFFTFilter->SetInput( movingFFTShiftFilter->GetOutput() );
typedef FFTFilterType::OutputImageType SpectralImageType;
realFilter->SetInput(movingFFTFilter->GetOutput());
imaginaryFilter->SetInput(movingFFTFilter->GetOutput());
#if ITK_VERSION_MAJOR < 4
#else
#endif
#if ITK_VERSION_MAJOR < 4
flipSignFilter->SetConstant(-1);
#else
flipSignFilter->SetConstant2(-1);
#endif
flipSignFilter->SetInput(imaginaryFilter->GetOutput());
#if ITK_VERSION_MAJOR < 4
typedef itk::RealAndImaginaryToComplexImageFilter<FloatImageType> RealImageToComplexFilterType;
#else
#endif
conjugateFilter->SetInput1(realFilter->GetOutput());
conjugateFilter->SetInput2(flipSignFilter->GetOutput());
SpectralImageType,
SpectralImageType > MultiplyFilterType;
multiplyFilter->SetInput1( fixedFFTFilter->GetOutput() );
multiplyFilter->SetInput2( conjugateFilter->GetOutput() );
#if ITK_VERSION_MAJOR < 4
typedef itk::VnlFFTComplexConjugateToRealImageFilter< SpectralImageType > IFFTFilterType;
#else
#endif
fftInverseFilter->SetInput( multiplyFilter->GetOutput() );
rescaler->SetInput( fftInverseFilter->GetOutput() );
rescaler->SetOutputMinimum(0);
rescaler->SetOutputMaximum(255);
rescaler->Update();
writer->SetFileName( "CrossCorr.png" );
writer->SetInput( rescaler->GetOutput() );
writer->Update();
ImageCalculatorFilterType;
imageCalculatorFilter->SetImage(rescaler->GetOutput());
imageCalculatorFilter->Compute();
UnsignedCharImageType::IndexType maximumLocation = imageCalculatorFilter->GetIndexOfMaximum();
std::cout << maximumLocation << std::endl;
return EXIT_SUCCESS;
}