X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FImage%2FExtractAxisFilter.hxx;fp=lib%2Ffpa%2FImage%2FExtractAxisFilter.hxx;h=6f91ade299d73889f7e1a3d982db161fefa9eac3;hb=09046275d77a6f1bb9e6a309f22f9510fba13550;hp=0000000000000000000000000000000000000000;hpb=4718fa5cbf776b532e8a422a48c1d0d788755ce1;p=FrontAlgorithms.git diff --git a/lib/fpa/Image/ExtractAxisFilter.hxx b/lib/fpa/Image/ExtractAxisFilter.hxx new file mode 100644 index 0000000..6f91ade --- /dev/null +++ b/lib/fpa/Image/ExtractAxisFilter.hxx @@ -0,0 +1,151 @@ +// ========================================================================= +// @author Leonardo Florez Valencia +// @email florez-l@javeriana.edu.co +// ========================================================================= + +#ifndef __fpa__Image__ExtractAxisFilter__hxx__ +#define __fpa__Image__ExtractAxisFilter__hxx__ + +#include + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +itk::ModifiedTimeType +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +GetMTime( ) const +{ + itk::ModifiedTimeType a = this->Superclass::GetMTime( ); + itk::ModifiedTimeType b = this->m_Centerness->GetMTime( ); + itk::ModifiedTimeType c = this->m_Dijsktra->GetMTime( ); + a = ( a < b )? a: b; + return( ( a < c )? a: c ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +AddSeed( const TVertex& seed ) +{ + this->m_Dijkstra->AddSeed( seed ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +AddSeed( const TPoint& seed ) +{ + this->m_Dijkstra->AddSeed( seed ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +ClearSeeds( ) +{ + this->m_Dijkstra->ClearSeeds( ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +SetInput( TInputImage* input ) +{ + this->Superclass::SetNthInput( 0, input ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +typename +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +TInputImage* +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +GetInput( ) +{ + return( dynamic_cast< TInputImage* >( this->Superclass::GetInput( 0 ) ) ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +const typename +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +TInputImage* +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +GetInput( ) const +{ + return( + dynamic_cast< const TInputImage* >( this->Superclass::GetInput( 0 ) ) + ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +typename +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +TPath* +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +GetOutput( ) +{ + return( dynamic_cast< TPath* >( this->Superclass::GetOutput( 0 ) ) ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +const typename +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +TPath* +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +GetOutput( ) const +{ + return( dynamic_cast< const TPath* >( this->Superclass::GetOutput( 0 ) ) ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +ExtractAxisFilter( ) + : Superclass( ) +{ + // I/O configuration + this->SetNumberOfRequiredInputs( 1 ); + this->SetNumberOfRequiredOutputs( 1 ); + this->SetNthOutput( 0, TPath::New( ) ); + + // Prepare weight function + typedef fpa::Image::Functors::Dijkstra::Invert< TOutputImage, TScalar > _TWeight; + typename _TWeight::Pointer weight = _TWeight::New( ); + weight->SetAlpha( 1 ); + weight->SetBeta( 1 ); + + // Filters + this->m_Centerness = TCenterness::New( ); + this->m_Dijkstra = TDijkstra::New( ); + this->m_Dijkstra->SetWeightFunction( weight ); + this->m_Dijkstra->StopAtOneFront( ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +~ExtractAxisFilter( ) +{ +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TScalar, class _TCenterness > +void fpa::Image::ExtractAxisFilter< _TInputImage, _TScalar, _TCenterness >:: +GenerateData( ) +{ + // Execute minipipeline + this->m_Centerness->SetInput( this->GetInput( ) ); + this->m_Dijkstra->SetInput( this->m_Centerness->GetOutput( ) ); + this->m_Dijkstra->Update( ); + + // Extract axis + typename TInputImage::IndexType a = this->m_Dijkstra->GetSeeds( )[ 0 ]; + typename TInputImage::IndexType b = this->m_Dijkstra->GetSeeds( )[ 1 ]; + this->m_Dijkstra->GetMinimumSpanningTree( )->GetPolyLineParametricPath( this->GetOutput( ), a, b ); +} + +#endif // __fpa__Image__ExtractAxisFilter__hxx__ + +// eof - $RCSfile$