]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Filters/Image/ExtractAxis.hxx
...
[FrontAlgorithms.git] / lib / fpa / Filters / Image / ExtractAxis.hxx
diff --git a/lib/fpa/Filters/Image/ExtractAxis.hxx b/lib/fpa/Filters/Image/ExtractAxis.hxx
new file mode 100644 (file)
index 0000000..5277ccd
--- /dev/null
@@ -0,0 +1,150 @@
+// =========================================================================
+// @author Leonardo Florez Valencia
+// @email florez-l@javeriana.edu.co
+// =========================================================================
+#ifndef __fpa__Filters__Image__ExtractAxis__hxx__
+#define __fpa__Filters__Image__ExtractAxis__hxx__
+
+#include <itkSignedMaurerDistanceMapImageFilter.h>
+#include <fpa/Functors/Dijkstra/Invert.h>
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+itk::ModifiedTimeType
+fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+GetMTime( ) const
+{
+  itk::ModifiedTimeType a = this->Superclass::GetMTime( );
+  itk::ModifiedTimeType b = this->m_Centerness->GetMTime( );
+  itk::ModifiedTimeType c = this->m_Dijkstra->GetMTime( );
+  a = ( a < b )? a: b;
+  return( ( a < c )? a: c );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+AddSeed( const TIndex& seed )
+{
+  this->m_Dijkstra->AddSeed( seed );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+AddSeed( const TPoint& seed )
+{
+  this->m_Dijkstra->AddSeed( seed );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+ClearSeeds( )
+{
+  this->m_Dijkstra->ClearSeeds( );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+SetInput( TInputImage* input )
+{
+  this->Superclass::SetNthInput( 0, input );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+typename fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+TInputImage* fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+GetInput( )
+{
+  return( dynamic_cast< TInputImage* >( this->Superclass::GetInput( 0 ) ) );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+const typename fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+TInputImage* fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+GetInput( ) const
+{
+  return(
+    dynamic_cast< const TInputImage* >( this->Superclass::GetInput( 0 ) )
+    );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+typename fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+TPath* fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+GetOutput( )
+{
+  return( dynamic_cast< TPath* >( this->Superclass::GetOutput( 0 ) ) );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+const typename fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+TPath* fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+GetOutput( ) const
+{
+  return( dynamic_cast< const TPath* >( this->Superclass::GetOutput( 0 ) ) );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+ExtractAxis( )
+  : Superclass( )
+{
+  // I/O configuration
+  this->SetNumberOfRequiredInputs( 1 );
+  this->SetNumberOfRequiredOutputs( 1 );
+  this->SetNthOutput( 0, TPath::New( ) );
+
+  // Prepare weight function
+  typedef fpa::Functors::Dijkstra::Invert< TScalar > _TWeight;
+  typename _TWeight::Pointer weight = _TWeight::New( );
+  weight->SetAlpha( 1 );
+  weight->SetBeta( 1 );
+
+  // Filters
+  typedef itk::SignedMaurerDistanceMapImageFilter< TInputImage, TScalarImage > _TDefaultCenterness;
+  typename _TDefaultCenterness::Pointer dc = _TDefaultCenterness::New( );
+  dc->InsideIsPositiveOn( );
+  dc->SquaredDistanceOn( );
+  dc->UseImageSpacingOn( );
+  this->m_Centerness = dc;
+
+  // Axis extractor
+  this->m_Dijkstra = TDijkstra::New( );
+  this->m_Dijkstra->SetWeightFunction( weight );
+  this->m_Dijkstra->StopAtOneFront( );
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+~ExtractAxis( )
+{
+}
+
+// -------------------------------------------------------------------------
+template< class _TInputImage, class _TScalar >
+void fpa::Filters::Image::ExtractAxis< _TInputImage, _TScalar >::
+GenerateData( )
+{
+  // Execute minipipeline
+  this->m_Centerness->SetInput( this->GetInput( ) );
+  this->m_Dijkstra->SetInput( this->m_Centerness->GetOutput( ) );
+  this->m_Dijkstra->Update( );
+
+  // Extract axis
+  typename TPath::Pointer out = this->GetOutput( );
+  this->m_Dijkstra->GetMinimumSpanningTree( )->GetPath(
+    out, this->m_StartIndex, this->m_EndIndex
+    );
+}
+
+#endif // __fpa__Filters__Image__ExtractAxis__hxx__
+// eof - $RCSfile$