X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=appli%2FCTBronchi%2FMoriLabelling.hxx;h=bc38389ad4dae540286b88954d1977dfd1dca075;hb=e69d65c084b579e4014cf35688eae78a9a397834;hp=5ca4fc4c1d1ac4de2523a92f7a2e314929880b07;hpb=7a0591e1611721f36428cee7d7cce6161f517612;p=FrontAlgorithms.git diff --git a/appli/CTBronchi/MoriLabelling.hxx b/appli/CTBronchi/MoriLabelling.hxx index 5ca4fc4..bc38389 100644 --- a/appli/CTBronchi/MoriLabelling.hxx +++ b/appli/CTBronchi/MoriLabelling.hxx @@ -6,6 +6,181 @@ #ifndef __CTBronchi__MoriLabelling__hxx__ #define __CTBronchi__MoriLabelling__hxx__ +#include + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TLabelImage > +const typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +TLabelImage* CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +GetInputLabelImage( ) const +{ + return( this->GetLabels( ) ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TLabelImage > +void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +SetInputLabelImage( TLabelImage* image ) +{ + this->SetLabels( image ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TLabelImage > +const typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +TInputImage* CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +GetInputRawImage( ) const +{ + return( this->GetInput( ) ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TLabelImage > +void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +SetInputRawImage( TInputImage* image ) +{ + this->SetInput( image ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TLabelImage > +typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +TInputValue CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +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 > +void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +SetUpperThreshold( TInputValue t ) +{ + TThresholdFunction* func = + dynamic_cast< TThresholdFunction* >( this->GetValuePredicate( ) ); + if( func != NULL ) + func->SetUpper( t ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TLabelImage > +CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +MoriLabelling( ) + : Superclass( ), + m_InsideLabel( TOutputValue( 0 ) ), + m_OutsideLabel( TOutputValue( 0 ) ) +{ + typename TThresholdFunction::Pointer func = TThresholdFunction::New( ); + this->SetPredicate( func ); +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TLabelImage > +CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +~MoriLabelling( ) +{ +} + +// ------------------------------------------------------------------------- +template< class _TInputImage, class _TLabelImage > +typename CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +TNodes CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +_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 > +void CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: +_UpdateOutputValue( TNode& n ) +{ + const TInputImage* input = this->GetInputRawImage( ); + const TLabelImage* labels = this->GetInputLabelImage( ); +} + + +/* TODO + TOutputValue m_InsideValue; + TOutputValue m_InsideLabel; + TOutputValue m_OutsideLabel; +*/ + + + + + + + + + + +/* TODO #include #include @@ -52,10 +227,10 @@ template< class _TInputImage, class _TLabelImage > CTBronchi::MoriLabelling< _TInputImage, _TLabelImage >:: MoriLabelling( ) : Superclass( ), - m_UpperThreshold( TLabel( 0 ) ), - m_InsideValue( TLabel( 0 ) ), - m_InsideLabel( TLabel( 0 ) ), - m_OutsideLabel( TLabel( 0 ) ) + m_UpperThreshold( TOutputValue( 0 ) ), + m_InsideValue( TOutputValue( 0 ) ), + m_InsideLabel( TOutputValue( 0 ) ), + m_OutsideLabel( TOutputValue( 0 ) ) { this->SetNumberOfRequiredInputs( 2 ); } @@ -89,7 +264,7 @@ ThreadedGenerateData( const TRegion& region, itk::ThreadIdType threadId ) if( this->m_UpperThreshold < iIt.Get( ) ) oIt.Set( this->m_OutsideLabel ); else - oIt.Set( TLabel( 0 ) ); + oIt.Set( TOutputValue( 0 ) ); } else oIt.Set( this->m_InsideLabel ); @@ -99,6 +274,7 @@ ThreadedGenerateData( const TRegion& region, itk::ThreadIdType threadId ) } // elihw } +*/ #endif // __CTBronchi__MoriLabelling__hxx__