]> Creatis software - FrontAlgorithms.git/blob - tests/image/BaseFunctions.h
...
[FrontAlgorithms.git] / tests / image / BaseFunctions.h
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5
6 #ifndef __fpa__tests__image__BaseFunctions__h__
7 #define __fpa__tests__image__BaseFunctions__h__
8
9 #include <cstdarg>
10 #include <string>
11
12 #include <itkImageFileReader.h>
13 #include <itkImageFileWriter.h>
14
15 #include <fpa/Config.h>
16 /* TODO
17    #ifdef USE_ivq
18    #  include <itkImageToVTKImageFilter.h>
19    #  include <itkVTKImageToImageFilter.h>
20    #  include <vtkSmartPointer.h>
21    #  include <vtkRenderWindow.h>
22    #  include <ivq/VTK/ImageViewer.h>
23    #  include <ivq/VTK/BrushWidget.h>
24    #  include <ivq/VTK/SeedWidgetOverImageActor.h>
25    #  include <fpa/Image/VisualDebugger2D.h>
26    #endif // USE_ivq
27 */
28
29 namespace fpa
30 {
31   namespace tests
32   {
33     namespace image
34     {
35       // -------------------------------------------------------------------
36       template< class _TPointer >
37       void CreateImage(
38         _TPointer& img,
39         const typename _TPointer::ObjectType::PixelType& zero,
40         ...
41         )
42       {
43         typedef typename _TPointer::ObjectType _TImage;
44
45         va_list vl;
46         va_start( vl, zero );
47
48         typename _TImage::SizeType size;
49         for( unsigned int d = 0; d < _TImage::ImageDimension; ++d )
50           size[ d ] = va_arg( vl, int );
51
52         typename _TImage::SpacingType spac;
53         for( unsigned int d = 0; d < _TImage::ImageDimension; ++d )
54           spac[ d ] = va_arg( vl, double );
55
56         img = _TImage::New( );
57         img->SetRegions( size );
58         img->SetSpacing( spac );
59         img->Allocate( );
60         img->FillBuffer( zero );
61
62         va_end( vl );
63       }
64
65       // -------------------------------------------------------------------
66       template< class _TPointer >
67       std::string Read( _TPointer& img, const std::string& fname )
68       {
69         typedef typename _TPointer::ObjectType _TImage;
70         typedef itk::ImageFileReader< _TImage > _TReader;
71
72         typename _TReader::Pointer reader = _TReader::New( );
73         reader->SetFileName( fname );
74         try
75         {
76           reader->Update( );
77         }
78         catch( std::exception& err )
79         {
80           return( err.what( ) );
81
82         } // ytr
83         img = reader->GetOutput( );
84         img->DisconnectPipeline( );
85         return( "" );
86       }
87
88       // -------------------------------------------------------------------
89       template< class _TImage >
90       std::string Write( const _TImage* img, const std::string& fname )
91       {
92         typedef itk::ImageFileWriter< _TImage > _TWriter;
93
94         typename _TWriter::Pointer writer = _TWriter::New( );
95         writer->SetInput( img );
96         writer->SetFileName( fname );
97         try
98         {
99           writer->Update( );
100         }
101         catch( std::exception& err )
102         {
103           return( err.what( ) );
104
105         } // ytr
106         return( "" );
107       }
108
109       // -------------------------------------------------------------------
110       /* TODO
111          #ifdef USE_ivq
112          template< class _TFilter >
113          class Viewer
114          {
115          public:
116          typedef _TFilter TFilter;
117          typedef typename _TFilter::TInputImage TInputImage;
118
119          public:
120          Viewer( const TInputImage* image )
121          {
122          this->m_VTKInputImage = TVTKInputImage::New( );
123          this->m_VTKInputImage->SetInput( image );
124          this->m_VTKInputImage->Update( );
125
126          this->m_Viewer = vtkSmartPointer< ivq::VTK::ImageViewer >::New( );
127          this->m_Viewer->SetInputData( this->m_VTKInputImage->GetOutput( ) );
128          }
129
130          virtual ~Viewer( )
131          {
132          }
133
134          void ActivateSeedWidget( )
135          {
136          this->m_SeedWidget =
137          vtkSmartPointer< ivq::VTK::SeedWidgetOverImageActor >::New( );
138          this->m_SeedWidget->SetActor( this->m_Viewer->GetImageActor( ) );
139          this->m_SeedWidget->SetInteractor(
140          this->m_Viewer->GetRenderWindow( )->GetInteractor( )
141          );
142          }
143
144          void ActivateBrushWidget( )
145          {
146          this->m_BrushWidget =
147          vtkSmartPointer< ivq::VTK::BrushWidget >::New( );
148          this->m_BrushWidget->SetImageActor( this->m_Viewer->GetImageActor( ) );
149          this->m_BrushWidget->SetInteractor(
150          this->m_Viewer->GetRenderWindow( )->GetInteractor( )
151          );
152          }
153
154          void Show( )
155          {
156          this->m_Viewer->Render( );
157          this->m_Viewer->ResetCamera( );
158          this->m_Viewer->Initialize( );
159          this->m_Viewer->Render( );
160          if( this->m_SeedWidget.GetPointer( ) != NULL )
161          this->m_SeedWidget->EnabledOn( );
162          if( this->m_BrushWidget.GetPointer( ) != NULL )
163          this->m_BrushWidget->EnabledOn( );
164          this->m_Viewer->Start( );
165          if( this->m_SeedWidget.GetPointer( ) != NULL )
166          this->m_SeedWidget->EnabledOff( );
167          if( this->m_BrushWidget.GetPointer( ) != NULL )
168          this->m_BrushWidget->EnabledOff( );
169          }
170
171          void AssociateSeedsTo( TFilter* filter )
172          {
173          if( this->m_SeedWidget.GetPointer( ) != NULL )
174          {
175          const ivq::VTK::SeedWidgetOverImageActor::TSeeds& wdg_seeds =
176          this->m_SeedWidget->GetSeeds( );
177          ivq::VTK::SeedWidgetOverImageActor::TSeeds::const_iterator wsIt;
178          for( wsIt = wdg_seeds.begin( ); wsIt != wdg_seeds.end( ); ++wsIt )
179          {
180          typename TInputImage::PointType pnt;
181          for( unsigned int i = 0; i < wsIt->second.size( ); i += 3 )
182          {
183          pnt[ 0 ] = wsIt->second[ i ];
184          pnt[ 1 ] = wsIt->second[ i + 1 ];
185
186          typename TInputImage::IndexType idx;
187          filter->GetInput( )->TransformPhysicalPointToIndex( pnt, idx );
188          filter->AddSeed( idx );
189
190          } // rof
191
192          } // rof
193
194          } // fi
195          }
196
197          void AssociateLabelsTo( TFilter* filter )
198          {
199          if( this->m_BrushWidget.GetPointer( ) != NULL )
200          {
201          typedef typename TFilter::TLabelImage _TLabelImage;
202          typedef itk::VTKImageToImageFilter< _TLabelImage > TITKImage;
203          typename TITKImage::Pointer itk_image = TITKImage::New( );
204          itk_image->SetInput( this->m_BrushWidget->GetCanvas( ) );
205          itk_image->Update( );
206          filter->SetLabels( itk_image->GetOutput( ) );
207
208          } // fi
209          }
210
211          void ObserveFilter( TFilter* filter )
212          {
213          typedef fpa::Image::VisualDebugger2D< TFilter > _TDeb;
214          typedef typename TFilter::TEvent                _TEvent;
215          typename _TDeb::Pointer deb = _TDeb::New( );
216          deb->SetVisualization(
217          this->m_Viewer->GetRenderer( ),
218          this->m_Viewer->GetRenderWindow( )->GetInteractor( )
219          );
220          this->m_Observer1 = filter->AddObserver( itk::StartEvent( ), deb );
221          this->m_Observer2 = filter->AddObserver( itk::EndEvent( ), deb );
222          this->m_Observer3 = filter->AddObserver( _TEvent( ), deb );
223          filter->VisualDebugOn( );
224          }
225
226          protected:
227          typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage;
228          typename TVTKInputImage::Pointer                      m_VTKInputImage;
229          vtkSmartPointer< ivq::VTK::ImageViewer >              m_Viewer;
230          vtkSmartPointer< ivq::VTK::SeedWidgetOverImageActor > m_SeedWidget;
231          vtkSmartPointer< ivq::VTK::BrushWidget >              m_BrushWidget;
232          unsigned long m_Observer1;
233          unsigned long m_Observer2;
234          unsigned long m_Observer3;
235          };
236          #endif // USE_ivq
237       */
238
239     } // ecapseman
240
241   } // ecapseman
242
243 } // ecapseman
244
245
246 #endif // __fpa__tests__image__BaseFunctions__h__
247
248 // eof - $RCSfile$