#include <iostream>
#include <string>
namespace
{
}
static void
CreateMask(MaskType * const mask);
static void
CreateImage(ImageType::Pointer image,
const itk::Index<2> & cornerOfSquare);
template <typename TImage>
void
WriteImage(TImage * const image, const std::string & filename);
int
main(int, char *[])
{
offset[0] = 5;
offset[1] = 6;
MaskType::Pointer mask = MaskType::New();
CreateMask(mask);
ImageType::Pointer fixedImage = ImageType::New();
cornerOfFixedSquare[0] = 3;
cornerOfFixedSquare[1] = 8;
CreateImage(fixedImage, cornerOfFixedSquare);
WriteImage(fixedImage.GetPointer(), "fixedImage.png");
ImageType::Pointer movingImage = ImageType::New();
cornerOfMovingSquare[0] = cornerOfFixedSquare[0] + offset[0];
cornerOfMovingSquare[1] = cornerOfFixedSquare[1] + offset[1];
CreateImage(movingImage, cornerOfMovingSquare);
WriteImage(movingImage.GetPointer(), "movingImage.png");
CorrelationFilterType::Pointer correlationFilter = CorrelationFilterType::New();
correlationFilter->SetFixedImage(fixedImage);
correlationFilter->SetMovingImage(movingImage);
correlationFilter->SetMovingImageMask(mask);
correlationFilter->Update();
WriteImage(correlationFilter->GetOutput(), "correlation.mha");
RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();
rescaleFilter->SetInput(correlationFilter->GetOutput());
rescaleFilter->SetOutputMinimum(0);
rescaleFilter->SetOutputMaximum(255);
rescaleFilter->Update();
WriteImage(rescaleFilter->GetOutput(), "correlation.png");
MinimumMaximumImageCalculatorType::Pointer minimumMaximumImageCalculatorFilter =
MinimumMaximumImageCalculatorType::New();
minimumMaximumImageCalculatorFilter->SetImage(correlationFilter->GetOutput());
minimumMaximumImageCalculatorFilter->Compute();
itk::Index<2> maximumCorrelationPatchCenter = minimumMaximumImageCalculatorFilter->GetIndexOfMaximum();
itk::Size<2> outputSize = correlationFilter->GetOutput()->GetLargestPossibleRegion().
GetSize();
maximumCorrelationPatchCenterFixed[0] = outputSize[0] / 2 - maximumCorrelationPatchCenter[0];
maximumCorrelationPatchCenterFixed[1] = outputSize[1] / 2 - maximumCorrelationPatchCenter[1];
std::cout << "Maximum location: " << maximumCorrelationPatchCenter << std::endl;
std::cout << "Maximum location fixed: " << maximumCorrelationPatchCenterFixed
<< std::endl;
std::cout << "Maximum value: " << minimumMaximumImageCalculatorFilter->GetMaximum()
<< std::endl;
return EXIT_SUCCESS;
}
void
CreateImage(ImageType::Pointer image,
const itk::Index<2> & cornerOfSquare)
{
image->SetRegions(region);
image->Allocate();
image->FillBuffer(0);
while (!imageIterator.IsAtEnd())
{
if (imageIterator.GetIndex()[0] > cornerOfSquare[0] &&
imageIterator.
GetIndex()[0] < cornerOfSquare[0] + squareSize &&
imageIterator.
GetIndex()[1] > cornerOfSquare[1] && imageIterator.
GetIndex()[1] < cornerOfSquare[1] + squareSize)
{
imageIterator.Set(255);
}
++imageIterator;
}
}
template <typename TImage>
void
WriteImage(TImage * const image, const std::string & filename)
{
typename WriterType::Pointer writer = WriterType::New();
writer->SetFileName(filename);
writer->SetInput(image);
writer->Update();
}
void
CreateMask(MaskType * const mask)
{
mask->SetRegions(region);
mask->Allocate();
mask->FillBuffer(255);
while (!maskIterator.IsAtEnd())
{
if (maskIterator.GetIndex()[0] > cornerOfSquare[0] && maskIterator.
GetIndex()[0] < cornerOfSquare[0] + squareSize &&
maskIterator.
GetIndex()[1] > cornerOfSquare[1] && maskIterator.
GetIndex()[1] < cornerOfSquare[1] + squareSize)
{
maskIterator.Set(0);
}
++maskIterator;
}
}