// ------------------------------------------------------------------------- // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co) // ------------------------------------------------------------------------- #ifndef __cpExtensions__Algorithms__SkeletonToImageFilter__hxx__ #define __cpExtensions__Algorithms__SkeletonToImageFilter__hxx__ // ------------------------------------------------------------------------- template< class _TSkeleton, class _TImage > const typename cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: TImageBase* cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: GetTemplateImage( ) const { return( dynamic_cast< const TImageBase* >( this->itk::ProcessObject::GetInput( 0 ) ) ); } // ------------------------------------------------------------------------- template< class _TSkeleton, class _TImage > void cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: SetTemplateImage( const TImageBase* image ) { this->itk::ProcessObject::SetNthInput( 0, const_cast< TImageBase* >( image ) ); } // ------------------------------------------------------------------------- template< class _TSkeleton, class _TImage > const typename cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: TSkeleton* cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: GetSkeleton( ) const { return( dynamic_cast< const TSkeleton* >( this->itk::ProcessObject::GetInput( 1 ) ) ); } // ------------------------------------------------------------------------- template< class _TSkeleton, class _TImage > void cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: SetSkeleton( const TSkeleton* skeleton ) { this->itk::ProcessObject::SetNthInput( 1, const_cast< TSkeleton* >( skeleton ) ); } // ------------------------------------------------------------------------- template< class _TSkeleton, class _TImage > cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: SkeletonToImageFilter( ) : Superclass( ), m_InsideValue( TPixel( 1 ) ), m_OutsideValue( TPixel( 0 ) ) { this->SetNumberOfRequiredInputs( 2 ); } // ------------------------------------------------------------------------- template< class _TSkeleton, class _TImage > cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: ~SkeletonToImageFilter( ) { } // ------------------------------------------------------------------------- template< class _TSkeleton, class _TImage > void cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >:: GenerateData( ) { const TSkeleton* sk = this->GetSkeleton( ); const TImageBase* im = this->GetTemplateImage( ); TImage* out = this->GetOutput( 0 ); out->SetLargestPossibleRegion( im->GetLargestPossibleRegion( ) ); out->SetRequestedRegion( im->GetRequestedRegion( ) ); out->SetBufferedRegion( im->GetBufferedRegion( ) ); out->SetSpacing( im->GetSpacing( ) ); out->SetOrigin( im->GetOrigin( ) ); out->SetDirection( im->GetDirection( ) ); out->Allocate( ); out->FillBuffer( this->m_OutsideValue ); // Fill skeleton auto mIt = sk->BeginEdgesRows( ); for( ; mIt != sk->EndEdgesRows( ); ++mIt ) { auto rIt = mIt->second.begin( ); for( ; rIt != mIt->second.end( ); ++rIt ) { auto eIt = rIt->second.begin( ); for( ; eIt != rIt->second.end( ); ++eIt ) { auto path = *eIt; for( unsigned int i = 0; i < path->GetSize( ); ++i ) out->SetPixel( path->GetVertex( i ), this->m_InsideValue ); } // rof } // rof } // rof } #endif // __cpExtensions__Algorithms__SkeletonToImageFilter__hxx__ // eof - $RCSfile$