#include <iostream>
#include <stdlib.h>
#include <iomanip>
class IterationUpdate
{
public:
: m_Method(m)
{}
void
Execute()
{
std::cout << std::setw(3) << m_Method.GetOptimizerIteration();
std::cout << " = " << std::setw(10) << std::setprecision(5) << m_Method.GetMetricValue() << std::endl;
std::cout << "\t#: " << m_Method.GetOptimizerPosition().size() << std::endl;
}
private:
};
int
main(int argc, char * argv[])
{
if (argc < 4)
{
std::cerr << "Usage: " << argv[0] << " <fixedImageFile> <movingImageFile> <outputTransformFile>" << std::endl;
return 1;
}
std::vector<unsigned int> transformDomainMeshSize(moving.
GetDimension(), 10);
std::cout << "Initial Parameters:" << std::endl;
std::cout << "[";
std::cout << std::setprecision(5) << std::fixed << initialParams[0];
for (size_t i = 1; i < initialParams.size(); i++)
{
std::cout << ", " << std::setprecision(5) << std::fixed << initialParams[i];
}
std::cout << "]" << std::endl;
double learningRate = 5.0;
unsigned int numberOfIterations = 100;
double convergenceMinimumValue = 1e-4;
unsigned int convergenceWindowSize = 5;
learningRate, numberOfIterations, convergenceMinimumValue, convergenceWindowSize);
IterationUpdate cmd1(R);
[]() { std::cout << "--------- Resolution Changing ---------" << std::endl; });
std::cout << "-------" << std::endl;
std::cout << outTx.
ToString() << std::endl;
if (getenv("SITK_NOSHOW") == NULL)
{
sitk::Show(cimg,
"ImageRegistrationMethodBSpline2 Composition");
}
return 0;
}
An interface method to the modular ITKv4 registration framework.
void SetInterpolator(InterpolatorEnum Interpolator)
Set and get the interpolator to use.
Transform Execute(const Image &fixed, const Image &moving)
Optimize the configured registration problem.
void SetOptimizerAsGradientDescentLineSearch(double learningRate, unsigned int numberOfIterations, double convergenceMinimumValue=1e-6, unsigned int convergenceWindowSize=10, double lineSearchLowerLimit=0, double lineSearchUpperLimit=5.0, double lineSearchEpsilon=0.01, unsigned int lineSearchMaximumIterations=20, EstimateLearningRateType estimateLearningRate=Once, double maximumStepSizeInPhysicalUnits=0.0)
Gradient descent optimizer with a golden section line search.
void SetMetricAsMattesMutualInformation(unsigned int numberOfHistogramBins=50)
Use the mutual information between two images to be registered using the method of Mattes et al.
void SetShrinkFactorsPerLevel(const std::vector< unsigned int > &shrinkFactors)
Set the isotropic shrink factors for each level.
std::string GetOptimizerStopConditionDescription() const
void SetSmoothingSigmasPerLevel(const std::vector< double > &smoothingSigmas)
Set the sigmas of Gaussian used for smoothing.
void SetOptimizerScalesFromPhysicalShift(unsigned int centralRegionRadius=5, double smallParameterVariation=0.01)
Estimating scales of transform parameters a step sizes, from the maximum voxel shift in physical spac...
unsigned int GetOptimizerIteration() const
double GetMetricValue() const
void SetInitialTransform(const Transform &transform)
Set the initial transform and parameters to optimize.
The Image class for SimpleITK.
unsigned int GetDimension() const
virtual int AddCommand(itk::simple::EventEnum event, itk::simple::Command &cmd)
Add a Command Object to observer the event.
Resample an image via a coordinate transform.
Image Execute(const Image &image1)
void SetInterpolator(InterpolatorEnum Interpolator)
void SetTransform(Transform Transform)
void SetReferenceImage(const Image &refImage)
void SetDefaultPixelValue(double DefaultPixelValue)
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...
Image Compose(const std::vector< Image > &images)
ComposeImageFilter combine several scalar images into a multicomponent image.
@ sitkLinear
N-D linear interpolation.
void SITKIO_EXPORT Show(const Image &image, const std::string &title="", const bool debugOn=ProcessObject::GetGlobalDefaultDebug())
@ sitkMultiResolutionIterationEvent
Occurs when some filters change processing to a different scale.
@ sitkIterationEvent
Occurs with some algorithms that run for a fixed or undetermined number of iterations.
BSplineTransform BSplineTransformInitializer(const Image &image1, const std::vector< uint32_t > &transformDomainMeshSize=std::vector< uint32_t >(3, 1u), unsigned int order=3u)
BSplineTransformInitializerFilter is a helper class intended to initialize the control point grid suc...
Image Add(Image &&image1, const Image &image2)
Pixel-wise addition of two images.
Image Divide(Image &&image1, const Image &image2)
Pixel-wise division of two images.
SITKCommon_EXPORT void WriteTransform(const Transform &transform, const PathType &filename)
Image RescaleIntensity(Image &&image1, double outputMinimum=0, double outputMaximum=255)
Applies a linear transformation to the intensity levels of the input Image .
Image Cast(const Image &image, PixelIDValueEnum pixelID)