// ========================================================================= // @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$