]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/Algorithms/SkeletonToImageFilter.hxx
...
[cpPlugins.git] / lib / cpExtensions / Algorithms / SkeletonToImageFilter.hxx
1 // -------------------------------------------------------------------------
2 // @author Leonardo Florez-Valencia (florez-l@javeriana.edu.co)
3 // -------------------------------------------------------------------------
4
5 #ifndef __cpExtensions__Algorithms__SkeletonToImageFilter__hxx__
6 #define __cpExtensions__Algorithms__SkeletonToImageFilter__hxx__
7
8 // -------------------------------------------------------------------------
9 template< class _TSkeleton, class _TImage >
10 const typename
11 cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
12 TImageBase*
13 cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
14 GetTemplateImage( ) const
15 {
16   return(
17     dynamic_cast< const TImageBase* >(
18       this->itk::ProcessObject::GetInput( 0 )
19       )
20     );
21 }
22
23 // -------------------------------------------------------------------------
24 template< class _TSkeleton, class _TImage >
25 void 
26 cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
27 SetTemplateImage( const TImageBase* image )
28 {
29   this->itk::ProcessObject::SetNthInput(
30     0, const_cast< TImageBase* >( image )
31     );
32 }
33
34 // -------------------------------------------------------------------------
35 template< class _TSkeleton, class _TImage >
36 const typename
37 cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
38 TSkeleton*
39 cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
40 GetSkeleton( ) const
41 {
42   return(
43     dynamic_cast< const TSkeleton* >(
44       this->itk::ProcessObject::GetInput( 1 )
45       )
46     );
47 }
48
49 // -------------------------------------------------------------------------
50 template< class _TSkeleton, class _TImage >
51 void
52 cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
53 SetSkeleton( const TSkeleton* skeleton )
54 {
55   this->itk::ProcessObject::SetNthInput(
56     1, const_cast< TSkeleton* >( skeleton )
57     );
58 }
59
60 // -------------------------------------------------------------------------
61 template< class _TSkeleton, class _TImage >
62 cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
63 SkeletonToImageFilter( )
64   : Superclass( ),
65     m_InsideValue( TPixel( 1 ) ),
66     m_OutsideValue( TPixel( 0 ) )
67 {
68   this->SetNumberOfRequiredInputs( 2 );
69 }
70
71 // -------------------------------------------------------------------------
72 template< class _TSkeleton, class _TImage >
73 cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
74 ~SkeletonToImageFilter( )
75 {
76 }
77
78 // -------------------------------------------------------------------------
79 template< class _TSkeleton, class _TImage >
80 void cpExtensions::Algorithms::SkeletonToImageFilter< _TSkeleton, _TImage >::
81 GenerateData( )
82 {
83   const TSkeleton* sk = this->GetSkeleton( );
84   const TImageBase* im = this->GetTemplateImage( );
85   TImage* out = this->GetOutput( 0 );
86
87   out->SetLargestPossibleRegion( im->GetLargestPossibleRegion( ) );
88   out->SetRequestedRegion( im->GetRequestedRegion( ) );
89   out->SetBufferedRegion( im->GetBufferedRegion( ) );
90   out->SetSpacing( im->GetSpacing( ) );
91   out->SetOrigin( im->GetOrigin( ) );
92   out->SetDirection( im->GetDirection( ) );
93   out->Allocate( );
94   out->FillBuffer( this->m_OutsideValue );
95
96   // Fill skeleton
97   auto mIt = sk->BeginEdgesRows( );
98   for( ; mIt != sk->EndEdgesRows( ); ++mIt )
99   {
100     auto rIt = mIt->second.begin( );
101     for( ; rIt != mIt->second.end( ); ++rIt )
102     {
103       auto eIt = rIt->second.begin( );
104       for( ; eIt != rIt->second.end( ); ++eIt )
105       {
106         auto path = *eIt;
107         for( unsigned int i = 0; i < path->GetSize( ); ++i )
108           out->SetPixel( path->GetVertex( i ), this->m_InsideValue );
109
110       } // rof
111
112     } // rof
113
114   } // rof
115 }
116
117 #endif // __cpExtensions__Algorithms__SkeletonToImageFilter__hxx__
118
119 // eof - $RCSfile$