#ifndef __CTBronchi__MoriLabelling__hxx__
#define __CTBronchi__MoriLabelling__hxx__
-#include <itkImageRegionConstIteratorWithIndex.h>
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-const typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-TLabelImage* CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-GetInputLabelImage( ) const
-{
- return( this->GetLabels( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-SetInputLabelImage( TLabelImage* image )
-{
- this->SetLabels( image );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-const typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-TInputImage* CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-GetInputRawImage( ) const
-{
- return( this->GetInput( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-SetInputRawImage( TInputImage* image )
-{
- this->SetInput( image );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-TInputValue CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-GetUpperThreshold( ) const
-{
- const TThresholdFunction* func =
- dynamic_cast< const TThresholdFunction* >( this->GetValuePredicate( ) );
- if( func != NULL )
- return( func->GetUpper( ) );
- else
- return( TInputValue( 0 ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-SetUpperThreshold( TInputValue t )
-{
- TThresholdFunction* func =
- dynamic_cast< TThresholdFunction* >( this->GetValuePredicate( ) );
- if( func != NULL )
- func->SetUpper( t );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-TOutputValue CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-GetOutsideValue( ) const
-{
- return( this->GetInitValue( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-SetOutsideLabel( TOutputValue o )
-{
- this->SetInitValue( o );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-MoriLabelling( )
- : Superclass( ),
- m_InsideLabel( TOutputValue( 0 ) )
-{
- typename TThresholdFunction::Pointer func = TThresholdFunction::New( );
- this->SetPredicate( func );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-~MoriLabelling( )
-{
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-TNodes CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-_UnifySeeds( )
-{
- this->m_Seeds.clear( );
- const TLabelImage* lbl = this->GetLabels( );
- if( lbl == NULL )
- {
- std::ostringstream msg;
- msg << "itk::ERROR: CTBronchi::MoriLabelling (" << this
- << "): Labelled image not defined.";
- ::itk::ExceptionObject e(
- __FILE__, __LINE__, msg.str( ).c_str( ), ITK_LOCATION
- );
- throw e;
-
- } // fi
-
- // Iterate over labels
- typename TLabelImage::RegionType reg = lbl->GetRequestedRegion( );
- itk::ImageRegionConstIteratorWithIndex< TLabelImage > lIt( lbl, reg );
- for( lIt.GoToBegin( ); !lIt.IsAtEnd( ); ++lIt )
- {
- if( lIt.Get( ) > 0 )
- {
- bool is_seed = false;
- for( unsigned int d = 0; d < TLabelImage::ImageDimension; ++d )
- {
- for( int s = -1; s <= 1; s += 2 )
- {
- TVertex neigh = lIt.GetIndex( );
- neigh[ d ] += s;
- if( reg.IsInside( neigh ) )
- is_seed |= ( lbl->GetPixel( neigh ) == 0 );
-
- } // rof
-
- } // rof
-
- if( !is_seed )
- {
- typename TSeedsInterface::TNode node;
- node.Vertex = lIt.GetIndex( );
- node.Parent = lIt.GetIndex( );
- node.FrontId = lIt.Get( );
- node.Value = this->m_InsideLabel;
- this->_Mark( node.Vertex, node.FrontId );
- this->_UpdateOutputValue( node );
- }
- else
- {
- typename TSeedsInterface::TSeed seed;
- seed.Vertex = lIt.GetIndex( );
- seed.IsPoint = false;
- seed.FrontId = lIt.Get( );
- this->m_Seeds.push_back( seed );
-
- } // fi
-
- } // fi
-
- } // rof
-
- // Ok, finish initialization
- return( this->Superclass::_UnifySeeds( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class _TInputImage, class _TLabelImage, class _TTraits >
-void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
-_UpdateOutputValue( TNode& n )
-{
- const TLabelImage* input_labels = this->GetInputLabelImage( );
-
- this->Superclass::_UpdateOutputValue( n );
- if( n.FrontId != 0 )
- {
- if( input_labels->GetPixel( n.Vertex ) == this->GetInsideValue( ) )
- n.Value = this->GetInsideLabel( );
- else
- n.Value = TOutputValue( 0 );
- this->TAlgorithm::_UpdateOutputValue( n );
-
- } // fi
-}
+/* TODO
+ #include <itkImageRegionConstIteratorWithIndex.h>
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ const typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ TLabelImage* CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ GetInputLabelImage( ) const
+ {
+ return( this->GetLabels( ) );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ SetInputLabelImage( TLabelImage* image )
+ {
+ this->SetLabels( image );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ const typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ TInputImage* CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ GetInputRawImage( ) const
+ {
+ return( this->GetInput( ) );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ SetInputRawImage( TInputImage* image )
+ {
+ this->SetInput( image );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ TInputValue CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ GetUpperThreshold( ) const
+ {
+ const TThresholdFunction* func =
+ dynamic_cast< const TThresholdFunction* >( this->GetValuePredicate( ) );
+ if( func != NULL )
+ return( func->GetUpper( ) );
+ else
+ return( TInputValue( 0 ) );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ SetUpperThreshold( TInputValue t )
+ {
+ TThresholdFunction* func =
+ dynamic_cast< TThresholdFunction* >( this->GetValuePredicate( ) );
+ if( func != NULL )
+ func->SetUpper( t );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ TOutputValue CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ GetOutsideValue( ) const
+ {
+ return( this->GetInitValue( ) );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ SetOutsideLabel( TOutputValue o )
+ {
+ this->SetInitValue( o );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ MoriLabelling( )
+ : Superclass( ),
+ m_InsideLabel( TOutputValue( 0 ) )
+ {
+ typename TThresholdFunction::Pointer func = TThresholdFunction::New( );
+ this->SetPredicate( func );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ ~MoriLabelling( )
+ {
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ TNodes CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ _UnifySeeds( )
+ {
+ this->m_Seeds.clear( );
+ const TLabelImage* lbl = this->GetLabels( );
+ if( lbl == NULL )
+ {
+ std::ostringstream msg;
+ msg << "itk::ERROR: CTBronchi::MoriLabelling (" << this
+ << "): Labelled image not defined.";
+ ::itk::ExceptionObject e(
+ __FILE__, __LINE__, msg.str( ).c_str( ), ITK_LOCATION
+ );
+ throw e;
+
+ } // fi
+
+ // Iterate over labels
+ typename TLabelImage::RegionType reg = lbl->GetRequestedRegion( );
+ itk::ImageRegionConstIteratorWithIndex< TLabelImage > lIt( lbl, reg );
+ for( lIt.GoToBegin( ); !lIt.IsAtEnd( ); ++lIt )
+ {
+ if( lIt.Get( ) > 0 )
+ {
+ bool is_seed = false;
+ for( unsigned int d = 0; d < TLabelImage::ImageDimension; ++d )
+ {
+ for( int s = -1; s <= 1; s += 2 )
+ {
+ TVertex neigh = lIt.GetIndex( );
+ neigh[ d ] += s;
+ if( reg.IsInside( neigh ) )
+ is_seed |= ( lbl->GetPixel( neigh ) == 0 );
+
+ } // rof
+
+ } // rof
+
+ if( !is_seed )
+ {
+ typename TSeedsInterface::TNode node;
+ node.Vertex = lIt.GetIndex( );
+ node.Parent = lIt.GetIndex( );
+ node.FrontId = lIt.Get( );
+ node.Value = this->m_InsideLabel;
+ this->_Mark( node.Vertex, node.FrontId );
+ this->_UpdateOutputValue( node );
+ }
+ else
+ {
+ typename TSeedsInterface::TSeed seed;
+ seed.Vertex = lIt.GetIndex( );
+ seed.IsPoint = false;
+ seed.FrontId = lIt.Get( );
+ this->m_Seeds.push_back( seed );
+
+ } // fi
+
+ } // fi
+
+ } // rof
+
+ // Ok, finish initialization
+ return( this->Superclass::_UnifySeeds( ) );
+ }
+
+ // -------------------------------------------------------------------------
+ template< class _TInputImage, class _TLabelImage, class _TTraits >
+ void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage, _TTraits >::
+ _UpdateOutputValue( TNode& n )
+ {
+ const TLabelImage* input_labels = this->GetInputLabelImage( );
+
+ this->Superclass::_UpdateOutputValue( n );
+ if( n.FrontId != 0 )
+ {
+ if( input_labels->GetPixel( n.Vertex ) == this->GetInsideValue( ) )
+ n.Value = this->GetInsideLabel( );
+ else
+ n.Value = TOutputValue( 0 );
+ this->TAlgorithm::_UpdateOutputValue( n );
+
+ } // fi
+ }
+*/
#endif // __CTBronchi__MoriLabelling__hxx__