+++ /dev/null
-// =========================================================================
-// @author Leonardo Florez Valencia
-// @email florez-l@javeriana.edu.co
-// =========================================================================
-
-#ifndef __fpa__Image__Algorithm__hxx__
-#define __fpa__Image__Algorithm__hxx__
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-typename fpa::Image::Algorithm< _TTraits >::TMarks*
-fpa::Image::Algorithm< _TTraits >::
-GetMarks( )
-{
- return(
- dynamic_cast< TMarks* >(
- this->itk::ProcessObject::GetOutput( this->m_MarksIdx )
- )
- );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-const typename fpa::Image::Algorithm< _TTraits >::TMarks*
-fpa::Image::Algorithm< _TTraits >::
-GetMarks( ) const
-{
- return(
- dynamic_cast< const TMarks* >(
- this->itk::ProcessObject::GetOutput( this->m_MarksIdx )
- )
- );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-fpa::Image::Algorithm< _TTraits >::
-Algorithm( )
- : Superclass( ),
- m_NeigborhoodOrder( 1 )
-{
- this->m_MarksIdx = this->GetNumberOfRequiredOutputs( );
- this->itk::ProcessObject::SetNumberOfRequiredOutputs( this->m_MarksIdx + 1 );
- this->SetNthOutput( this->m_MarksIdx, TMarks::New( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-fpa::Image::Algorithm< _TTraits >::
-~Algorithm( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-typename fpa::Image::Algorithm< _TTraits >::TNodes
-fpa::Image::Algorithm< _TTraits >::
-_UnifySeeds( )
-{
- const TInputImage* input = this->GetInput( );
- typename TInputImage::RegionType region = input->GetRequestedRegion( );
- TSeeds& seeds = this->GetSeeds( );
- TNodes nodes;
-
- typename TSeeds::iterator sIt = seeds.begin( );
- for( ; sIt != seeds.end( ); ++sIt )
- {
- TNode node;
- if( sIt->IsPoint )
- input->TransformPhysicalPointToIndex( sIt->Point, sIt->Vertex );
- else
- input->TransformIndexToPhysicalPoint( sIt->Vertex, sIt->Point );
- if( region.IsInside( sIt->Vertex ) )
- {
- sIt->IsUnified = true;
- node.Vertex = sIt->Vertex;
- node.Parent = node.Vertex;
- if( sIt->FrontId == 0 )
- node.FrontId = nodes.size( ) + 1;
- else
- node.FrontId = sIt->FrontId;
- nodes.insert( node );
- }
- else
- sIt->IsUnified = false;
-
- } // rof
-
- return( nodes );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-void fpa::Image::Algorithm< _TTraits >::
-_ConfigureOutput( const TOutputValue& v )
-{
- const TInputImage* in = this->GetInput( );
-
- TOutputImage* out = this->GetOutput( );
- out->SetLargestPossibleRegion( in->GetLargestPossibleRegion( ) );
- out->SetRequestedRegion( in->GetRequestedRegion( ) );
- out->SetBufferedRegion( in->GetBufferedRegion( ) );
- out->SetSpacing( in->GetSpacing( ) );
- out->SetOrigin( in->GetOrigin( ) );
- out->SetDirection( in->GetDirection( ) );
- out->Allocate( );
- out->FillBuffer( v );
-
- TMarks* marks = this->GetMarks( );
- marks->SetLargestPossibleRegion( in->GetLargestPossibleRegion( ) );
- marks->SetRequestedRegion( in->GetRequestedRegion( ) );
- marks->SetBufferedRegion( in->GetBufferedRegion( ) );
- marks->SetSpacing( in->GetSpacing( ) );
- marks->SetOrigin( in->GetOrigin( ) );
- marks->SetDirection( in->GetDirection( ) );
- marks->Allocate( );
- marks->FillBuffer( TFrontId( 0 ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-typename fpa::Image::Algorithm< _TTraits >::TNeighborhood
-fpa::Image::Algorithm< _TTraits >::
-_GetNeighbors( const TVertex& v ) const
-{
- typename TInputImage::RegionType region =
- this->GetInput( )->GetRequestedRegion( );
- TNeighborhood neighborhood;
- if( this->m_NeigborhoodOrder != 1 )
- {
- // TODO
- }
- else
- {
- for( unsigned int d = 0; d < TInputImage::ImageDimension; ++d )
- {
- for( int s = -1; s <= 1; s += 2 )
- {
- TVertex n = v;
- n[ d ] += s;
- if( region.IsInside( n ) )
- neighborhood.push_back( n );
-
- } // rof
-
- } // rof
-
- } // fi
- return( neighborhood );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-typename fpa::Image::Algorithm< _TTraits >::TInputValue
-fpa::Image::Algorithm< _TTraits >::
-_GetInputValue( const TVertex& v ) const
-{
- return( this->GetInput( )->GetPixel( v ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-typename fpa::Image::Algorithm< _TTraits >::TOutputValue
-fpa::Image::Algorithm< _TTraits >::
-_GetOutputValue( const TVertex& v ) const
-{
- return( this->GetOutput( )->GetPixel( v ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-void fpa::Image::Algorithm< _TTraits >::
-_UpdateOutputValue( TNode& n )
-{
- this->GetOutput( )->SetPixel( n.Vertex, n.Value );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-bool fpa::Image::Algorithm< _TTraits >::
-_IsMarked( const TVertex& v ) const
-{
- return( this->GetMarks( )->GetPixel( v ) > 0 );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-unsigned long fpa::Image::Algorithm< _TTraits >::
-_GetMark( const TVertex& v ) const
-{
- return( ( unsigned long )( this->GetMarks( )->GetPixel( v ) ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TTraits >
-void fpa::Image::Algorithm< _TTraits >::
-_Mark( const TVertex& v, unsigned long frontId )
-{
- this->GetMarks( )->SetPixel( v, TFrontId( frontId ) );
-}
-
-#endif // __fpa__Image__Algorithm__hxx__
-
-// eof - $RCSfile$