MRFImageRegistrationMethod< TFixedImage, TMovingImage, TTransform >
::MRFImageRegistrationMethod()
{
	// set some of the initial values
	this->SetNumberOfRequiredOutputs(1);

	m_FixedImage = 0;
	m_MovingImage = 0;
	m_BSplineTransform = 0;
	m_Interpolator = 0;
	m_Metric = 0;
	m_Verbose = false;
	m_FixedRegionSet = false;
	m_SamplingRate = 1;

	m_MaxLabelDisplacement = 0.4;
	m_OptimiserLevels = 5;
	m_MaxDisplacementScaleFactor = 0.4;
	m_LabelSteps = 5;
	m_DenseSampling = false;
	m_Lambda = 1.0;

	m_InitialTransformParameters = ParametersType(1);
	m_InitialTransformParameters.Fill(0.0);
	m_LastTransformParameters    = ParametersType(1);
	m_LastTransformParameters.Fill(0.0);

	TransformOutputPointer transformDecorator = 
		itkDynamicCastInDebugMode< TransformOutputType * >( this->MakeOutput(0).GetPointer() );
	this->ProcessObject::SetNthOutput(0, transformDecorator.GetPointer() );
	this->SetNumberOfThreads( this->GetMultiThreader()->GetNumberOfThreads() );
}
MRFImageRegistrationMethod< TFixedImage, TMovingImage >::
MRFImageRegistrationMethod()
{
	this->SetNumberOfRequiredInputs(1);

	// set the values to zero to make sure that they are required
	m_FixedImage   = 0;
	m_MovingImage  = 0;
	m_Transform    = 0;
	m_Interpolator = 0;
	m_Metric       = 0;

	m_InitialTransformParameters = ParametersType(1);
	m_LastTransformParameters    = ParametersType(1);

	m_InitialTransformParameters.Fill(0.0f);
	m_LastTransformParameters.Fill(0.0f);

	m_FixedImageRegionDefined = false;

	TransformOutputPointer transformDecorator =
			static_cast< TransformOutputType * >( this->MakeOutput(0).GetPointer() );

	this->ProcessObject::SetNthOutput( 0, transformDecorator.GetPointer() );
	this->SetNumberOfThreads( this->GetMultiThreader()->GetNumberOfThreads() );
}