7 #include <vtkRenderer.h>
8 #include <vtkRenderWindow.h>
9 #include <vtkRenderWindowInteractor.h>
11 #include <cpPlugins/Interface/Plugins.h>
12 #include <cpPlugins/Interface/Image.h>
14 #include <cpExtensions/Visualization/ImageSliceActors.h>
16 // -------------------------------------------------------------------------
17 typedef cpPlugins::Interface::Plugins TPlugins;
18 typedef cpPlugins::Interface::Image TImage;
19 typedef cpExtensions::Visualization::ImageSliceActors TSliceActors;
21 // -------------------------------------------------------------------------
22 int main( int argc, char* argv[] )
27 << "Usage: " << argv[ 0 ]
28 << " plugins_file input_image"
29 << " lower1 upper1 lower2 upper2 lower3 upper3"
34 std::string plugins_file = argv[ 1 ];
35 std::string input_image_file = argv[ 2 ];
36 double lower[ 3 ], upper[ 3 ];
37 lower[ 0 ] = std::atof( argv[ 3 ] );
38 upper[ 0 ] = std::atof( argv[ 4 ] );
39 lower[ 1 ] = std::atof( argv[ 5 ] );
40 upper[ 1 ] = std::atof( argv[ 6 ] );
41 lower[ 2 ] = std::atof( argv[ 7 ] );
42 upper[ 2 ] = std::atof( argv[ 8 ] );
45 cpPlugins::Interface::Plugins plugins;
46 if( !plugins.LoadPluginsPath( plugins_file ) )
48 std::cerr << "Failed to load plugins." << std::endl;
54 std::string image_name = "";
57 image_name = plugins.ReadImage( input_image_file, "" );
59 catch( std::exception& err )
61 std::cerr << err.what( ) << std::endl;
66 // Apply three a two-level threshold
67 std::vector< std::string > thresholds_names;
68 std::string filter_name =
69 "cpPlugins::BasicFilters::BinaryThresholdImageFilter";
70 for( int i = 0; i < 3; ++i )
72 if( !( plugins.ActivateFilter( filter_name ) ) )
74 std::cerr << "No filter found" << std::endl;
80 TPlugins::TStringContainer input_names;
81 plugins.GetActiveFilterInputsNames( input_names );
82 for( auto iIt = input_names.begin( ); iIt != input_names.end( ); ++iIt )
83 plugins.ConnectInputInActiveFilter( image_name, *iIt );
86 TPlugins::TParameters* filter_params = plugins.GetActiveFilterParameters( );
87 filter_params->SetReal( "LowerThresholdValue", lower[ i ] );
88 filter_params->SetReal( "UpperThresholdValue", upper[ i ] );
89 filter_params->SetUint( "InsideValue", i + 10 );
90 filter_params->SetUint( "OutsideValue", 0 );
93 TPlugins::TStringContainer output_names;
94 plugins.GetActiveFilterOutputsNames( output_names );
96 std::stringstream obj_name_str;
97 obj_name_str << "output_" << i;
98 plugins.SetOutputNameInActiveFilter(
100 *( output_names.begin( ) )
104 output_names.clear( );
107 if( !( plugins.UpdateActiveFilter( output_names, image_name ) ) )
109 std::cerr << "Error executing filter." << std::endl;
114 catch( std::exception& err )
116 std::cerr << err.what( ) << std::endl;
120 thresholds_names.push_back( *( output_names.begin( ) ) );
122 plugins.DeactivateFilter( );
127 TImage* image = plugins.GetData< TImage >( image_name );
128 TImage* thr0 = plugins.GetData< TImage >( thresholds_names[ 0 ] );
129 TImage* thr1 = plugins.GetData< TImage >( thresholds_names[ 1 ] );
130 TImage* thr2 = plugins.GetData< TImage >( thresholds_names[ 2 ] );
132 // Configure visualization objects
133 vtkSmartPointer< vtkRenderer > renderer =
134 vtkSmartPointer< vtkRenderer >::New( );
135 renderer->SetBackground( 0.3, 0.3, 0.3 );
137 vtkSmartPointer< vtkRenderWindow > window =
138 vtkSmartPointer< vtkRenderWindow >::New( );
139 window->AddRenderer( renderer );
140 window->SetSize( 600, 600 );
142 // Set up the interaction
143 vtkSmartPointer< vtkRenderWindowInteractor > interactor =
144 vtkSmartPointer< vtkRenderWindowInteractor >::New( );
145 window->SetInteractor( interactor );
147 // Create slice actors
148 vtkSmartPointer< TSliceActors > image_actors =
149 vtkSmartPointer< TSliceActors >::New( );
150 image_actors->SetInputImage( image->GetVTK< vtkImageData >( ) );
151 image_actors->AddBinaryImage( thr0->GetVTK< vtkImageData >( ), 1, 0, 0 );
152 image_actors->AddBinaryImage( thr1->GetVTK< vtkImageData >( ), 0, 1, 0 );
153 image_actors->AddBinaryImage( thr2->GetVTK< vtkImageData >( ), 0, 0, 1 );
154 image_actors->SetAxis( 2 );
155 image_actors->PushActorsInto( window );
158 renderer->ResetCamera( );
160 interactor->Start( );