]> Creatis software - cpPlugins.git/blob - appli/examples/example_ViewImageThreshold.cxx
9c7ffea408aeb41ae549083d122ce3194eb58bb9
[cpPlugins.git] / appli / examples / example_ViewImageThreshold.cxx
1 #include <cstdlib>
2 #include <iostream>
3 #include <string>
4 #include <vector>
5
6 #include <vtkRenderer.h>
7 #include <vtkRenderWindow.h>
8 #include <vtkRenderWindowInteractor.h>
9
10 #include <cpPlugins/Interface/Plugins.h>
11 #include <cpPlugins/Interface/Image.h>
12
13 #include <cpExtensions/Visualization/ImageSliceActors.h>
14
15 // -------------------------------------------------------------------------
16 typedef cpPlugins::Interface::Plugins                 TPlugins;
17 typedef cpPlugins::Interface::Image                   TImage;
18 typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
19
20 // -------------------------------------------------------------------------
21 int main( int argc, char* argv[] )
22 {
23   if( argc < 5 )
24   {
25     std::cerr
26       << "Usage: " << argv[ 0 ]
27       << " plugins_file input_image lower upper"
28       << std::endl;
29     return( 1 );
30
31   } // fi
32   std::string plugins_file = argv[ 1 ];
33   double lower = std::atof( argv[ argc - 2 ] );
34   double upper = std::atof( argv[ argc - 1 ] );
35
36   // Load plugins
37   cpPlugins::Interface::Plugins plugins;
38   if( !plugins.LoadPluginsPath( plugins_file ) )
39   {
40     std::cerr << "Failed to load plugins." << std::endl;
41     return( 1 );
42
43   } // fi
44
45   // Associate filenames
46   std::vector< std::string > fnames;
47   for( int i = 2; i < argc - 2; ++i )
48     fnames.push_back( argv[ i ] );
49   
50   // Read image
51   std::string image_name = "";
52   try
53   {
54     image_name = plugins.ReadImage( fnames, "" );
55   }
56   catch( std::exception& err )
57   {
58     std::cerr << err.what( ) << std::endl;
59     return( 1 );
60
61   } // yrt
62
63   // Apply a two-level threshold
64   std::string filter_name =
65     "cpPlugins::BasicFilters::BinaryThresholdImageFilter";
66
67   if( !( plugins.ActivateFilter( filter_name ) ) )
68   {
69     std::cerr << "No filter found" << std::endl;
70     return( 1 );
71
72   } // fi
73
74   // Connect inputs
75   TPlugins::TStringContainer input_names;
76   plugins.GetActiveFilterInputsNames( input_names );
77   for( auto iIt = input_names.begin( ); iIt != input_names.end( ); ++iIt )
78     plugins.ConnectInputInActiveFilter( image_name, *iIt );
79
80   // Configure
81   TPlugins::TParameters* filter_params = plugins.GetActiveFilterParameters( );
82   filter_params->SetReal( "LowerThresholdValue", lower );
83   filter_params->SetReal( "UpperThresholdValue", upper );
84   filter_params->SetUint( "InsideValue", 1 );
85   filter_params->SetUint( "OutsideValue", 0 );
86
87   // Execute
88   TPlugins::TStringContainer output_names;
89   try
90   {
91     if( !( plugins.UpdateActiveFilter( output_names, image_name ) ) )
92     {
93       std::cerr << "Error executing filter." << std::endl;
94       return( 1 );
95
96     } // fi
97   }
98   catch( std::exception& err )
99   {
100     std::cerr << err.what( ) << std::endl;
101     return( 1 );
102
103   } // yrt
104   std::string threshold_name = *( output_names.begin( ) );
105   
106   // Get both images
107   TImage* image = plugins.GetData< TImage >( image_name );
108   TImage* threshold = plugins.GetData< TImage >( threshold_name );
109
110   // Configure visualization objects
111   vtkSmartPointer< vtkRenderer > renderer =
112     vtkSmartPointer< vtkRenderer >::New( );
113   renderer->SetBackground( 0.1, 0.3, 0.5 );
114
115   vtkSmartPointer< vtkRenderWindow > window =
116     vtkSmartPointer< vtkRenderWindow >::New( );
117   window->AddRenderer( renderer );
118   window->SetSize( 600, 600 );
119
120   // Set up the interaction
121   vtkSmartPointer< vtkRenderWindowInteractor > interactor =
122     vtkSmartPointer< vtkRenderWindowInteractor >::New( );
123   window->SetInteractor( interactor );
124
125   // Create slice actors
126   vtkSmartPointer< TSliceActors > image_actors =
127     vtkSmartPointer< TSliceActors >::New( );
128   image_actors->SetInputImage( image->GetVTK< vtkImageData >( ) );
129   image_actors->AddBinaryImage( threshold->GetVTK< vtkImageData >( ), 1, 0, 1 );
130   image_actors->SetAxis( 2 );
131   image_actors->PushActorsInto( window );
132
133   // Begin interaction
134   image_actors->ResetCamera( );
135   window->Render( );
136   interactor->Start( );
137
138   return( 0 );
139 }
140
141 // eof - $RCSfile$