#include <iostream>
#include <string>
int main(int argc, char *argv[])
{
if(argc < 2)
{
std::cerr << "Required: filename" << std::endl;
return EXIT_FAILURE;
}
std::string filename = argv[1];
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(filename.c_str());
reader->Update();
FloatImageType > ExtractFilterType;
ExtractFilterType::Pointer extractFilter = ExtractFilterType::New();
FloatImageType::IndexType start;
start.Fill(50);
FloatImageType::SizeType patchSize;
patchSize.Fill(51);
FloatImageType::RegionType desiredRegion(start,patchSize);
extractFilter->SetRegionOfInterest(desiredRegion);
extractFilter->SetInput(reader->GetOutput());
extractFilter->Update();
radius[0] = (radius[0]-1) / 2;
radius[1] = (radius[1]-1) / 2;
CorrelationFilterType::Pointer correlationFilter = CorrelationFilterType::New();
correlationFilter->SetInput(reader->GetOutput());
correlationFilter->SetTemplate(kernelOperator);
correlationFilter->Update();
MinimumMaximumImageCalculatorType;
MinimumMaximumImageCalculatorType::Pointer minimumMaximumImageCalculatorFilter
= MinimumMaximumImageCalculatorType::New ();
minimumMaximumImageCalculatorFilter->SetImage(correlationFilter->GetOutput());
minimumMaximumImageCalculatorFilter->Compute();
itk::Index<2> maximumCorrelationPatchCenter = minimumMaximumImageCalculatorFilter->GetIndexOfMaximum();
std::cout << "Maximum: " << maximumCorrelationPatchCenter << std::endl;
{
RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();
rescaleFilter->SetInput(correlationFilter->GetOutput());
rescaleFilter->SetOutputMinimum(0);
rescaleFilter->SetOutputMaximum(255);
rescaleFilter->Update();
WriterType::Pointer writer = WriterType::New();
writer->SetInput(rescaleFilter->GetOutput());
writer->SetFileName("correlation.png");
writer->Update();
}
{
RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();
rescaleFilter->SetInput(extractFilter->GetOutput());
rescaleFilter->SetOutputMinimum(0);
rescaleFilter->SetOutputMaximum(255);
rescaleFilter->Update();
WriterType::Pointer writer = WriterType::New();
writer->SetInput(rescaleFilter->GetOutput());
writer->SetFileName("patch.png");
writer->Update();
}
FloatImageType::IndexType bestPatchStart;
bestPatchStart[0] = maximumCorrelationPatchCenter[0] - radius[0];
bestPatchStart[1] = maximumCorrelationPatchCenter[1] - radius[1];
FloatImageType::RegionType bestPatchRegion(bestPatchStart,patchSize);
ExtractFilterType::Pointer bestPatchExtractFilter = ExtractFilterType::New();
bestPatchExtractFilter->SetRegionOfInterest(bestPatchRegion);
bestPatchExtractFilter->SetInput(reader->GetOutput());
bestPatchExtractFilter->Update();
viewer.
AddImage(extractFilter->GetOutput());
viewer.
AddImage(correlationFilter->GetOutput());
viewer.
AddImage(bestPatchExtractFilter->GetOutput());
return EXIT_SUCCESS;
}