225 lines
6.4 KiB
C++
225 lines
6.4 KiB
C++
#ifndef ITKREG23_H
|
|
#define ITKREG23_h
|
|
|
|
#include "itkCommand.h"
|
|
|
|
#include "itkExhaustiveOptimizer.h"
|
|
#include "itkMutualInformationTwoImageToOneImageMetric.h"
|
|
#include "itkNormalizedCorrelationTwoImageToOneImageMetric.h"
|
|
#include "itkPowellOptimizer.h"
|
|
#include "itkTwoProjectionImageRegistrationMethod.h"
|
|
#include "itkAmoebaOptimizer.h"
|
|
|
|
#include "itkCommand.h"
|
|
#include "itkObject.h"
|
|
#include "itkObjectFactory.h"
|
|
#include "itkSmartPointer.h"
|
|
|
|
#include "itkImageProcessorHelpers.h"
|
|
#include "itkQtIterationUpdate.h"
|
|
|
|
#include "itkReg23MetaInformation.h"
|
|
|
|
|
|
namespace itk{
|
|
|
|
class ITK_EXPORT itkReg23 : public itk::Object
|
|
{
|
|
|
|
public:
|
|
|
|
/** Standard "Self" typedef. */
|
|
typedef itkReg23 Self;
|
|
/** Standard "Superclass" typedef. */
|
|
typedef Object Superclass;
|
|
/** Smart pointer typedef support */
|
|
typedef itk::SmartPointer<Self> Pointer;
|
|
typedef itk::SmartPointer<const Self> ConstPointer;
|
|
/** Method of creation through the object factory. */
|
|
itkNewMacro(Self);
|
|
/** Run-time type information (and related methods). */
|
|
itkTypeMacro(itkReg23, Object);
|
|
|
|
using ChangeInformationFilterType = itk::ChangeInformationImageFilter<InternalImageType>;
|
|
using RoiForRegistration = itk::ImageRegion<Dimension>;
|
|
using InterpolatorType = itk::gSiddonJacobsRayCastInterpolateImageFunction<InternalImageType, double>;
|
|
|
|
/* ---- User provided */
|
|
|
|
itkSetMacro(OptimizerObserver, CommandIterationUpdate::Pointer);
|
|
itkGetMacro(OptimizerObserver, CommandIterationUpdate::Pointer);
|
|
|
|
itkSetMacro(r23Meta, R23MetaInformation::Pointer);
|
|
itkGetMacro(r23Meta, R23MetaInformation::Pointer);
|
|
|
|
itkSetMacro(PowellMeta, PowellOptimizerMetaInformation::Pointer);
|
|
itkGetMacro(PowellMeta, PowellOptimizerMetaInformation::Pointer);
|
|
|
|
itkSetMacro(AmoebaMeta, AmoebaOptimizerMetaInformation::Pointer);
|
|
itkGetMacro(AmoebaMeta, AmoebaOptimizerMetaInformation::Pointer);
|
|
|
|
itkSetMacro(MIMeta, MIMetricMetaInformation::Pointer);
|
|
itkGetMacro(MIMeta, MIMetricMetaInformation::Pointer);
|
|
|
|
itkSetMacro(NCCMeta, NCCMetricMetaInformation::Pointer);
|
|
itkGetMacro(NCCMeta, NCCMetricMetaInformation::Pointer);
|
|
|
|
|
|
itkSetMacro(Volume, InternalImageType::Pointer);
|
|
itkGetMacro(Volume, InternalImageType::Pointer);
|
|
|
|
itkSetMacro(PA, InternalImageType::Pointer);
|
|
itkGetMacro(PA, InternalImageType::Pointer);
|
|
|
|
itkSetMacro(LAT, InternalImageType::Pointer);
|
|
itkGetMacro(LAT, InternalImageType::Pointer);
|
|
|
|
itkSetMacro(InternalTransf1, InternalTransformMetaInformation::Pointer);
|
|
itkGetMacro(InternalTransf1, InternalTransformMetaInformation::Pointer);
|
|
|
|
itkSetMacro(InternalTransf2, InternalTransformMetaInformation::Pointer);
|
|
itkGetMacro(InternalTransf2, InternalTransformMetaInformation::Pointer);
|
|
|
|
itkSetMacro(filter1, ChangeInformationFilterType::Pointer);
|
|
itkGetMacro(filter1, ChangeInformationFilterType::Pointer);
|
|
|
|
itkSetMacro(filter2, ChangeInformationFilterType::Pointer);
|
|
itkGetMacro(filter2, ChangeInformationFilterType::Pointer);
|
|
|
|
itkSetMacro(interpolator1, InterpolatorType::Pointer);
|
|
itkGetMacro(interpolator1, InterpolatorType::Pointer);
|
|
|
|
itkSetMacro(interpolator2, InterpolatorType::Pointer);
|
|
itkGetMacro(interpolator2, InterpolatorType::Pointer);
|
|
|
|
itkSetMacro(TransformMetaInfo, TransformMetaInformation::Pointer);
|
|
itkGetMacro(TransformMetaInfo, TransformMetaInformation::Pointer);
|
|
|
|
/* ---- User provided END */
|
|
itkSetMacro(roiAutoReg1, RoiForRegistration);
|
|
itkGetMacro(roiAutoReg1, RoiForRegistration);
|
|
|
|
itkSetMacro(roiAutoReg2, RoiForRegistration);
|
|
itkGetMacro(roiAutoReg2, RoiForRegistration);
|
|
|
|
|
|
|
|
/** Auto Reg23 methods */
|
|
|
|
/** Initialize the registration pipeline*/
|
|
void InitializeRegistration();
|
|
/** Start the registration process*/
|
|
int StartRegistration(std::string extraInfo);
|
|
/** Get the current cost function value from the optimizer*/
|
|
double GetOptimizerValue();
|
|
|
|
/** Get the cost function value for the current transform*/
|
|
double GetCurrentMetricValue();
|
|
|
|
/** Get the cost function value for the current transform*/
|
|
Optimizer::ParametersType GetCurrentPosition();
|
|
|
|
/** Auto Reg23 methods END */
|
|
|
|
void setROISizeToZero();
|
|
|
|
protected:
|
|
itkReg23();
|
|
virtual ~itkReg23();
|
|
void PrintSelf(std::ostream& os, itk::Indent indent) const;
|
|
|
|
|
|
private:
|
|
itkReg23(const Self&); //purposely not implemented
|
|
void operator=(const Self&); //purposely not implemented
|
|
|
|
/** Optimizer which tries to find the minimun (Powell Optimizer)*/
|
|
using PowellOptimizerType = itk::PowellOptimizer;
|
|
/** Optimizer which tries to find the minimn (Powell Optimizer)*/
|
|
using AmoebaOptimizerType = itk::AmoebaOptimizer;
|
|
/** Optimizer which samples the whol space */
|
|
using ExhaustiveOptimizerType = itk::ExhaustiveOptimizer;
|
|
/** Metric to calculate similarites between images*/
|
|
using MetricType = itk::NormalizedCorrelationTwoImageToOneImageMetric<InternalImageType, InternalImageType>;
|
|
using MIMetricType = itk::MutualInformationTwoImageToOneImageMetric<InternalImageType, InternalImageType>;
|
|
/** The thing which actuall does the image registration*/
|
|
using RegistrationType = itk::TwoProjectionImageRegistrationMethod<InternalImageType, InternalImageType>;
|
|
|
|
|
|
|
|
RegistrationType::Pointer
|
|
registration;
|
|
MetricType::Pointer
|
|
NCCmetric;
|
|
MIMetricType::Pointer
|
|
MImetric;
|
|
PowellOptimizerType::Pointer
|
|
PowellOptimizer;
|
|
AmoebaOptimizerType::Pointer
|
|
AmoebaOptimizer;
|
|
ExhaustiveOptimizerType::Pointer
|
|
ExhaustiveOptimizer;
|
|
|
|
/* ---- User provided */
|
|
|
|
R23MetaInformation::Pointer
|
|
m_r23Meta;
|
|
|
|
PowellOptimizerMetaInformation::Pointer
|
|
m_PowellMeta;
|
|
|
|
AmoebaOptimizerMetaInformation::Pointer
|
|
m_AmoebaMeta;
|
|
|
|
MIMetricMetaInformation::Pointer
|
|
m_MIMeta;
|
|
|
|
NCCMetricMetaInformation::Pointer
|
|
m_NCCMeta;
|
|
|
|
InternalImageType::Pointer
|
|
m_Volume,
|
|
m_PA,
|
|
m_LAT;
|
|
|
|
InternalTransformMetaInformation::Pointer
|
|
m_InternalTransf1,
|
|
m_InternalTransf2;
|
|
|
|
ChangeInformationFilterType::Pointer
|
|
m_filter1,
|
|
m_filter2;
|
|
|
|
InterpolatorType::Pointer
|
|
m_interpolator1,
|
|
m_interpolator2;
|
|
|
|
TransformMetaInformation::Pointer
|
|
m_TransformMetaInfo;
|
|
|
|
CommandIterationUpdate::Pointer
|
|
m_OptimizerObserver;
|
|
|
|
/* ---- User provided END */
|
|
|
|
TransformType::Pointer
|
|
IsocTransform,
|
|
Transform1,
|
|
Transform2;
|
|
|
|
RoiForRegistration
|
|
m_roiAutoReg1,
|
|
m_roiAutoReg2;
|
|
|
|
bool m_UseDumptoFile;
|
|
|
|
|
|
double m_OptmizerValue;
|
|
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|