SimpleITK  
DemonsRegistration2/DemonsRegistration2.cxx
/*=========================================================================
*
* Copyright NumFOCUS
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*=========================================================================*/
// This example is based on ITK's DeformableRegistration2.cxx example
#include <SimpleITK.h>
#include <iostream>
#include <stdlib.h>
#include <iomanip>
namespace sitk = itk::simple;
class IterationUpdate : public sitk::Command
{
public:
: m_Filter(m)
{}
void
Execute() override
{
// use sitk's output operator for std::vector etc..
using sitk::operator<<;
// stash the stream state
std::ios state(NULL);
state.copyfmt(std::cout);
std::cout << std::fixed << std::setfill(' ') << std::setprecision(5);
std::cout << std::setw(3) << m_Filter.GetElapsedIterations();
std::cout << " = " << std::setw(10) << m_Filter.GetMetric();
std::cout << std::endl;
std::cout.copyfmt(state);
}
private:
};
int
main(int argc, char * argv[])
{
if (argc < 4)
{
std::cerr << "Usage: " << argv[0]
<< " <fixedImageFilter> <movingImageFile> [initialTransformFile] <outputTransformFile>" << std::endl;
return 1;
}
sitk::Image fixed = sitk::ReadImage(argv[1]);
sitk::Image moving = sitk::ReadImage(argv[2]);
if (fixed.GetPixelID() == sitk::sitkUInt8 || fixed.GetPixelID() == sitk::sitkInt8)
{
}
else
{
}
moving = matcher.Execute(moving, fixed);
IterationUpdate cmd(filter);
filter.SetNumberOfIterations(200);
filter.SetStandardDeviations(1.0);
sitk::Image displacementField;
if (argc > 4)
{
sitk::Transform initialTransform = sitk::ReadTransform(argv[3]);
argv[3] = argv[4];
--argc;
toDisplacementFilter.SetReferenceImage(fixed);
displacementField = toDisplacementFilter.Execute(initialTransform);
displacementField = filter.Execute(fixed, moving, displacementField);
}
else
{
displacementField = filter.Execute(fixed, moving);
}
std::cout << "-------" << std::endl;
std::cout << "Number Of Iterations: " << filter.GetElapsedIterations() << std::endl;
std::cout << " RMS: " << filter.GetRMSChange() << std::endl;
sitk::DisplacementFieldTransform outTx(displacementField);
sitk::WriteTransform(outTx, argv[3]);
return 0;
}
itk::simple::Image
The Image class for SimpleITK.
Definition: sitkImage.h:76
itk::simple::FastSymmetricForcesDemonsRegistrationFilter
Deformably register two images using a symmetric forces demons algorithm.
Definition: sitkFastSymmetricForcesDemonsRegistrationFilter.h:66
itk::simple::ReadTransform
SITKCommon_EXPORT Transform ReadTransform(const PathType &filename)
itk::simple::HistogramMatchingImageFilter::SetNumberOfMatchPoints
Self & SetNumberOfMatchPoints(uint32_t NumberOfMatchPoints)
Definition: sitkHistogramMatchingImageFilter.h:81
itk::simple::ProcessObject::AddCommand
virtual int AddCommand(itk::simple::EventEnum event, itk::simple::Command &cmd)
Add a Command Object to observer the event.
itk::simple::DisplacementFieldTransform
A dense deformable transform over a bounded spatial domain for 2D or 3D coordinates space.
Definition: sitkDisplacementFieldTransform.h:34
itk::simple::Transform
A simplified wrapper around a variety of ITK transforms.
Definition: sitkTransform.h:86
itk::simple::TransformToDisplacementFieldFilter
Generate a displacement field from a coordinate transform.
Definition: sitkTransformToDisplacementFieldFilter.h:50
itk::simple::FastSymmetricForcesDemonsRegistrationFilter::SetNumberOfIterations
Self & SetNumberOfIterations(uint32_t NumberOfIterations)
Definition: sitkFastSymmetricForcesDemonsRegistrationFilter.h:96
itk::simple::TransformToDisplacementFieldFilter::Execute
Image Execute(const Transform &transform)
SimpleITK.h
itk::simple::FastSymmetricForcesDemonsRegistrationFilter::Execute
Image Execute(const Image &fixedImage, const Image &movingImage, const Image &initialDisplacementField)
itk::simple::Command
An implementation of the Command design pattern for callback.
Definition: sitkCommand.h:44
itk::simple::ReadImage
SITKIO_EXPORT Image ReadImage(const PathType &filename, PixelIDValueEnum outputPixelType=sitkUnknown, const std::string &imageIO="")
ReadImage is a procedural interface to the ImageFileReader class which is convenient for most image r...
itk::simple::TransformToDisplacementFieldFilter::SetReferenceImage
void SetReferenceImage(const Image &refImage)
itk::simple::Image::GetPixelID
PixelIDValueEnum GetPixelID() const
itk::simple::HistogramMatchingImageFilter::ThresholdAtMeanIntensityOn
Self & ThresholdAtMeanIntensityOn()
Definition: sitkHistogramMatchingImageFilter.h:94
itk::simple::HistogramMatchingImageFilter::Execute
Image Execute(const Image &image, const Image &referenceImage)
itk::simple::HistogramMatchingImageFilter
Normalize the grayscale values for a source image by matching the shape of the source image histogram...
Definition: sitkHistogramMatchingImageFilter.h:53
itk::simple::WriteTransform
SITKCommon_EXPORT void WriteTransform(const Transform &transform, const PathType &filename)
itk::simple::HistogramMatchingImageFilter::SetNumberOfHistogramLevels
Self & SetNumberOfHistogramLevels(uint32_t NumberOfHistogramLevels)
Definition: sitkHistogramMatchingImageFilter.h:71
itk::simple::sitkIterationEvent
@ sitkIterationEvent
Occurs with some algorithms that run for a fixed or undetermined number of iterations.
Definition: sitkEvent.h:47
itk::simple::Command::Execute
virtual void Execute()
itk::simple
Definition: sitkAdditionalProcedures.h:28
itk::simple::FastSymmetricForcesDemonsRegistrationFilter::GetElapsedIterations
uint32_t GetElapsedIterations() const
Number of iterations run.
Definition: sitkFastSymmetricForcesDemonsRegistrationFilter.h:217
itk::simple::FastSymmetricForcesDemonsRegistrationFilter::GetRMSChange
double GetRMSChange() const
Definition: sitkFastSymmetricForcesDemonsRegistrationFilter.h:225
itk::simple::FastSymmetricForcesDemonsRegistrationFilter::SetStandardDeviations
Self & SetStandardDeviations(std::vector< double > StandardDeviations)
Definition: sitkFastSymmetricForcesDemonsRegistrationFilter.h:84