This class performes a symmetric forces demons registration between two images with the same modality. More...
#include <mitkSymmetricForcesDemonsRegistration.h>
Public Types | |
typedef SymmetricForcesDemonsRegistration | Self |
typedef RegistrationBase | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
Public Member Functions | |
virtual const char * | GetClassName () const |
void | SetNumberOfIterations (int iterations) |
Sets the number of iterations which will be performed during the registration process. | |
void | SetStandardDeviation (float deviation) |
Sets the standard deviation used by the symmetric forces demons registration. | |
void | SetSaveDeformationField (bool saveField) |
Sets whether the resulting deformation field should be saved or not. | |
void | SetDeformationFieldFileName (const char *fieldName) |
Sets the filename for the resulting deformation field. | |
void | SetSaveResult (bool saveResult) |
Sets whether the result should be saved or not. | |
void | SetResultFileName (const char *resultName) |
Sets the filename for the resulting deformed image. | |
itk::Image< class itk::Vector < float, 3 >, 3 >::Pointer | GetDeformationField () |
Returns the deformation field, which results by the registration. | |
virtual void | GenerateData () |
Starts the symmetric forces demons registration. | |
Static Public Member Functions | |
static Pointer | New () |
Method for creation through the object factory. | |
Protected Member Functions | |
SymmetricForcesDemonsRegistration () | |
Default constructor. | |
virtual | ~SymmetricForcesDemonsRegistration () |
Default destructor. | |
template<typename TPixel , unsigned int VImageDimension> | |
void | GenerateData2 (itk::Image< TPixel, VImageDimension > *itkImage1) |
Template class to perform the symmetric forces demons registration with any kind of image. Called by GenerateData(). | |
Protected Attributes | |
int | m_Iterations |
float | m_StandardDeviation |
const char * | m_FieldName |
const char * | m_ResultName |
bool | m_SaveField |
bool | m_SaveResult |
itk::Image< class itk::Vector < float, 3 >, 3 >::Pointer | m_DeformationField |
This class performes a symmetric forces demons registration between two images with the same modality.
Definition at line 38 of file mitkSymmetricForcesDemonsRegistration.h.
typedef itk::SmartPointer<const Self> mitk::SymmetricForcesDemonsRegistration::ConstPointer |
Reimplemented from mitk::RegistrationBase.
Definition at line 43 of file mitkSymmetricForcesDemonsRegistration.h.
typedef itk::SmartPointer<Self> mitk::SymmetricForcesDemonsRegistration::Pointer |
Reimplemented from mitk::RegistrationBase.
Definition at line 43 of file mitkSymmetricForcesDemonsRegistration.h.
Reimplemented from mitk::RegistrationBase.
Definition at line 43 of file mitkSymmetricForcesDemonsRegistration.h.
Reimplemented from mitk::RegistrationBase.
Definition at line 43 of file mitkSymmetricForcesDemonsRegistration.h.
mitk::SymmetricForcesDemonsRegistration::SymmetricForcesDemonsRegistration | ( | ) | [protected] |
Default constructor.
Definition at line 25 of file mitkSymmetricForcesDemonsRegistration.cpp.
: m_Iterations(50), m_StandardDeviation(1.0), m_FieldName("newField.mhd"), m_ResultName("deformedImage.mhd"), m_SaveField(true), m_SaveResult(true), m_DeformationField(NULL) {
mitk::SymmetricForcesDemonsRegistration::~SymmetricForcesDemonsRegistration | ( | ) | [protected, virtual] |
virtual void mitk::SymmetricForcesDemonsRegistration::GenerateData | ( | ) | [inline, virtual] |
Starts the symmetric forces demons registration.
Reimplemented from mitk::ImageSource.
Definition at line 88 of file mitkSymmetricForcesDemonsRegistration.h.
References AccessByItk.
{ if (this->GetInput()) { AccessByItk(this->GetInput(), GenerateData2); } }
void mitk::SymmetricForcesDemonsRegistration::GenerateData2 | ( | itk::Image< TPixel, VImageDimension > * | itkImage1 ) | [protected] |
Template class to perform the symmetric forces demons registration with any kind of image. Called by GenerateData().
Definition at line 77 of file mitkSymmetricForcesDemonsRegistration.cpp.
References mitk::RegistrationBase::AddStepsToDo(), mitk::CastToItkImage(), mitk::CastToMitkImage(), mitk::ImageSource::GetOutput(), m_DeformationField, m_FieldName, m_Iterations, mitk::RegistrationBase::m_ReferenceImage, m_ResultName, m_SaveField, m_SaveResult, m_StandardDeviation, MITK_ERROR, New(), mitk::RegistrationBase::SetProgress(), and mitk::RegistrationBase::SetRemainingProgress().
{ typedef typename itk::Image< TPixel, VImageDimension > FixedImageType; typedef typename itk::Image< TPixel, VImageDimension > MovingImageType; typedef float InternalPixelType; typedef typename itk::Image< InternalPixelType, VImageDimension > InternalImageType; typedef typename itk::CastImageFilter< FixedImageType, InternalImageType > FixedImageCasterType; typedef typename itk::CastImageFilter< MovingImageType, InternalImageType > MovingImageCasterType; typedef typename itk::Vector< float, VImageDimension > VectorPixelType; typedef typename itk::Image< VectorPixelType, VImageDimension > DeformationFieldType; typedef typename itk::SymmetricForcesDemonsRegistrationFilter< InternalImageType, InternalImageType, DeformationFieldType> RegistrationFilterType; typedef typename itk::WarpImageFilter< MovingImageType, MovingImageType, DeformationFieldType > WarperType; typedef typename itk::LinearInterpolateImageFunction< MovingImageType, double > InterpolatorType; typedef TPixel OutputPixelType; typedef typename itk::Image< OutputPixelType, VImageDimension > OutputImageType; typedef typename itk::CastImageFilter< MovingImageType, OutputImageType > CastFilterType; typedef typename itk::ImageFileWriter< OutputImageType > WriterType; typedef typename itk::ImageFileWriter< DeformationFieldType > FieldWriterType; typedef typename itk::InverseDeformationFieldImageFilter<DeformationFieldType, DeformationFieldType> InverseFilterType; typename FixedImageType::Pointer fixedImage = FixedImageType::New(); mitk::CastToItkImage(m_ReferenceImage, fixedImage); typename MovingImageType::Pointer movingImage = itkImage1; if (fixedImage.IsNotNull() && movingImage.IsNotNull()) { typename RegistrationFilterType::Pointer filter = RegistrationFilterType::New(); this->AddStepsToDo(4); itk::ReceptorMemberCommand<SymmetricForcesDemonsRegistration>::Pointer command = itk::ReceptorMemberCommand<SymmetricForcesDemonsRegistration>::New(); command->SetCallbackFunction(this, &SymmetricForcesDemonsRegistration::SetProgress); filter->AddObserver( itk::IterationEvent(), command ); typename FixedImageCasterType::Pointer fixedImageCaster = FixedImageCasterType::New(); fixedImageCaster->SetInput(fixedImage); filter->SetFixedImage( fixedImageCaster->GetOutput() ); typename MovingImageCasterType::Pointer movingImageCaster = MovingImageCasterType::New(); movingImageCaster->SetInput(movingImage); filter->SetMovingImage(movingImageCaster->GetOutput()); filter->SetNumberOfIterations( m_Iterations ); filter->SetStandardDeviations( m_StandardDeviation ); filter->Update(); typename WarperType::Pointer warper = WarperType::New(); typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); warper->SetInput( movingImage ); warper->SetInterpolator( interpolator ); warper->SetOutputSpacing( fixedImage->GetSpacing() ); warper->SetOutputOrigin( fixedImage->GetOrigin() ); warper->SetDeformationField( filter->GetOutput() ); warper->Update(); typename WriterType::Pointer writer = WriterType::New(); typename CastFilterType::Pointer caster = CastFilterType::New(); writer->SetFileName( m_ResultName ); caster->SetInput( warper->GetOutput() ); writer->SetInput( caster->GetOutput() ); if(m_SaveResult) { writer->Update(); } Image::Pointer outputImage = this->GetOutput(); mitk::CastToMitkImage( warper->GetOutput(), outputImage ); if (VImageDimension == 2) { typedef DeformationFieldType VectorImage2DType; typedef typename DeformationFieldType::PixelType Vector2DType; typename VectorImage2DType::ConstPointer vectorImage2D = filter->GetOutput(); typename VectorImage2DType::RegionType region2D = vectorImage2D->GetBufferedRegion(); typename VectorImage2DType::IndexType index2D = region2D.GetIndex(); typename VectorImage2DType::SizeType size2D = region2D.GetSize(); typedef typename itk::Vector< float, 3 > Vector3DType; typedef typename itk::Image< Vector3DType, 3 > VectorImage3DType; typedef typename itk::ImageFileWriter< VectorImage3DType > WriterType; WriterType::Pointer writer3D = WriterType::New(); VectorImage3DType::Pointer vectorImage3D = VectorImage3DType::New(); VectorImage3DType::RegionType region3D; VectorImage3DType::IndexType index3D; VectorImage3DType::SizeType size3D; index3D[0] = index2D[0]; index3D[1] = index2D[1]; index3D[2] = 0; size3D[0] = size2D[0]; size3D[1] = size2D[1]; size3D[2] = 1; region3D.SetSize( size3D ); region3D.SetIndex( index3D ); typename VectorImage2DType::SpacingType spacing2D = vectorImage2D->GetSpacing(); VectorImage3DType::SpacingType spacing3D; spacing3D[0] = spacing2D[0]; spacing3D[1] = spacing2D[1]; spacing3D[2] = 1.0; vectorImage3D->SetSpacing( spacing3D ); vectorImage3D->SetRegions( region3D ); vectorImage3D->Allocate(); typedef typename itk::ImageRegionConstIterator< VectorImage2DType > Iterator2DType; typedef typename itk::ImageRegionIterator< VectorImage3DType > Iterator3DType; Iterator2DType it2( vectorImage2D, region2D ); Iterator3DType it3( vectorImage3D, region3D ); it2.GoToBegin(); it3.GoToBegin(); Vector2DType vector2D; Vector3DType vector3D; vector3D[2] = 0; // set Z component to zero. while( !it2.IsAtEnd() ) { vector2D = it2.Get(); vector3D[0] = vector2D[0]; vector3D[1] = vector2D[1]; it3.Set( vector3D ); ++it2; ++it3; } writer3D->SetInput( vectorImage3D ); m_DeformationField = vectorImage3D; writer3D->SetFileName( m_FieldName ); try { if(m_SaveField) { writer3D->Update(); } } catch( itk::ExceptionObject & excp ) { MITK_ERROR << excp << std::endl; } } else { typename FieldWriterType::Pointer fieldwriter = FieldWriterType::New(); fieldwriter->SetFileName( m_FieldName ); fieldwriter->SetInput( filter->GetOutput() ); //m_DeformationField = filter->GetOutput(); m_DeformationField = (itk::Image<itk::Vector<float, 3>,3> *)(filter->GetOutput()); //see BUG #3732 if(m_SaveField) { fieldwriter->Update(); } } this->SetRemainingProgress(4); }
virtual const char* mitk::SymmetricForcesDemonsRegistration::GetClassName | ( | ) | const [virtual] |
Reimplemented from mitk::RegistrationBase.
itk::Image< class itk::Vector< float, 3 >, 3 >::Pointer mitk::SymmetricForcesDemonsRegistration::GetDeformationField | ( | ) |
Returns the deformation field, which results by the registration.
Definition at line 71 of file mitkSymmetricForcesDemonsRegistration.cpp.
References m_DeformationField.
{ return m_DeformationField;
static Pointer mitk::SymmetricForcesDemonsRegistration::New | ( | ) | [static] |
Method for creation through the object factory.
Reimplemented from mitk::RegistrationBase.
Referenced by QmitkDemonsRegistrationView::CalculateTransformation(), GenerateData2(), and mitkSymmetricForcesDemonsRegistrationTest().
void mitk::SymmetricForcesDemonsRegistration::SetDeformationFieldFileName | ( | const char * | fieldName ) |
Sets the filename for the resulting deformation field.
Definition at line 56 of file mitkSymmetricForcesDemonsRegistration.cpp.
References m_FieldName.
{ m_FieldName = fieldName;
void mitk::SymmetricForcesDemonsRegistration::SetNumberOfIterations | ( | int | iterations ) |
Sets the number of iterations which will be performed during the registration process.
Definition at line 41 of file mitkSymmetricForcesDemonsRegistration.cpp.
References m_Iterations.
{ m_Iterations = iterations;
void mitk::SymmetricForcesDemonsRegistration::SetResultFileName | ( | const char * | resultName ) |
Sets the filename for the resulting deformed image.
Definition at line 66 of file mitkSymmetricForcesDemonsRegistration.cpp.
References m_ResultName.
{ m_ResultName = resultName;
void mitk::SymmetricForcesDemonsRegistration::SetSaveDeformationField | ( | bool | saveField ) |
Sets whether the resulting deformation field should be saved or not.
Definition at line 51 of file mitkSymmetricForcesDemonsRegistration.cpp.
References m_SaveField.
{ m_SaveField = saveField;
void mitk::SymmetricForcesDemonsRegistration::SetSaveResult | ( | bool | saveResult ) |
Sets whether the result should be saved or not.
Definition at line 61 of file mitkSymmetricForcesDemonsRegistration.cpp.
References m_SaveResult.
{ m_SaveResult = saveResult;
void mitk::SymmetricForcesDemonsRegistration::SetStandardDeviation | ( | float | deviation ) |
Sets the standard deviation used by the symmetric forces demons registration.
Definition at line 46 of file mitkSymmetricForcesDemonsRegistration.cpp.
References m_StandardDeviation.
{ m_StandardDeviation = deviation;
itk::Image<class itk::Vector<float, 3>,3>::Pointer mitk::SymmetricForcesDemonsRegistration::m_DeformationField [protected] |
Definition at line 120 of file mitkSymmetricForcesDemonsRegistration.h.
Referenced by GenerateData2(), and GetDeformationField().
const char* mitk::SymmetricForcesDemonsRegistration::m_FieldName [protected] |
Definition at line 116 of file mitkSymmetricForcesDemonsRegistration.h.
Referenced by GenerateData2(), and SetDeformationFieldFileName().
int mitk::SymmetricForcesDemonsRegistration::m_Iterations [protected] |
Definition at line 114 of file mitkSymmetricForcesDemonsRegistration.h.
Referenced by GenerateData2(), and SetNumberOfIterations().
const char* mitk::SymmetricForcesDemonsRegistration::m_ResultName [protected] |
Definition at line 117 of file mitkSymmetricForcesDemonsRegistration.h.
Referenced by GenerateData2(), and SetResultFileName().
bool mitk::SymmetricForcesDemonsRegistration::m_SaveField [protected] |
Definition at line 118 of file mitkSymmetricForcesDemonsRegistration.h.
Referenced by GenerateData2(), and SetSaveDeformationField().
bool mitk::SymmetricForcesDemonsRegistration::m_SaveResult [protected] |
Definition at line 119 of file mitkSymmetricForcesDemonsRegistration.h.
Referenced by GenerateData2(), and SetSaveResult().
float mitk::SymmetricForcesDemonsRegistration::m_StandardDeviation [protected] |
Definition at line 115 of file mitkSymmetricForcesDemonsRegistration.h.
Referenced by GenerateData2(), and SetStandardDeviation().