#include #include #include #include #include #include #include #include "vtkCompareImageManager.h" int main (int argc, char*argv[]) { if( argc<3 ) { std::cout << "Usage: " << std::endl; std::cout << "\t" << argv[0] << " " << std::endl; std::cout << "Example: " << std::endl; std::cout << "\t" << argv[0] << " [vtkINRIA3D_DATA_DIR]/MRI.vtk vtkINRIA3D_DATA_DIR]/MRI2.vtk" << std::endl; exit (-1); } /** In this example, we illustrate the use of the vtkCompareImageManager. We first set up four vtkImageView2D/3D to display an image. */ vtkViewImage2D* view1 = vtkViewImage2D::New(); vtkViewImage2D* view2 = vtkViewImage2D::New(); vtkViewImage2D* view3 = vtkViewImage2D::New(); vtkViewImage3D* view4 = vtkViewImage3D::New(); vtkRenderWindowInteractor* iren1 = vtkRenderWindowInteractor::New(); vtkRenderWindowInteractor* iren2 = vtkRenderWindowInteractor::New(); vtkRenderWindowInteractor* iren3 = vtkRenderWindowInteractor::New(); vtkRenderWindowInteractor* iren4 = vtkRenderWindowInteractor::New(); vtkRenderWindow* rwin1 = vtkRenderWindow::New(); vtkRenderWindow* rwin2 = vtkRenderWindow::New(); vtkRenderWindow* rwin3 = vtkRenderWindow::New(); vtkRenderWindow* rwin4 = vtkRenderWindow::New(); vtkRenderer* renderer1 = vtkRenderer::New(); vtkRenderer* renderer2 = vtkRenderer::New(); vtkRenderer* renderer3 = vtkRenderer::New(); vtkRenderer* renderer4 = vtkRenderer::New(); iren1->SetRenderWindow (rwin1); iren2->SetRenderWindow (rwin2); iren3->SetRenderWindow (rwin3); iren4->SetRenderWindow (rwin4); rwin1->AddRenderer (renderer1); rwin2->AddRenderer (renderer2); rwin3->AddRenderer (renderer3); rwin4->AddRenderer (renderer4); view1->SetRenderWindow ( rwin1 ); view2->SetRenderWindow ( rwin2 ); view3->SetRenderWindow ( rwin3 ); view4->SetRenderWindow ( rwin4 ); view1->SetRenderer ( renderer1 ); view2->SetRenderer ( renderer2 ); view3->SetRenderer ( renderer3 ); view4->SetRenderer ( renderer4 ); view1->SetLinkWindowLevel (0); view2->SetLinkWindowLevel (0); view3->SetLinkWindowLevel (0); view4->SetLinkWindowLevel (0); double color[3] = {0.0,0.0,0.0}; view4->SetTextColor (color); view4->SetRenderingModeToPlanar(); view4->SetCubeVisibility(1); view1->SetAboutData ("Powered by vtkINRIA3D"); view2->SetAboutData ("Powered by vtkINRIA3D"); view3->SetAboutData ("Powered by vtkINRIA3D"); view4->SetAboutData ("Powered by vtkINRIA3D"); view1->AddChild (view2); view2->AddChild (view3); view3->AddChild (view4); view4->AddChild (view1); vtkStructuredPointsReader* reader1 = vtkStructuredPointsReader::New(); reader1->SetFileName (argv[1]); reader1->GetOutput()->Update(); vtkStructuredPointsReader* reader2 = vtkStructuredPointsReader::New(); reader2->SetFileName (argv[2]); reader2->GetOutput()->Update(); view1->SetImage (reader1->GetOutput()); view2->SetImage (reader2->GetOutput()); view1->SyncResetWindowLevel(); /** We setup the vtkCompareImageManager. Not much to do: feed it with the 2 images to compare, choose the mode and set the mode-specific parameters. */ vtkCompareImageManager* manager = vtkCompareImageManager::New(); manager->SetInput1 ( reader1->GetOutput() ); manager->SetInput2 ( reader2->GetOutput() ); manager->SetComparisonMode ( vtkCompareImageManager::COMPARE_GRID ); manager->SetNumberOfDivisions (10, 10, 10); manager->SetWindowLevel (view1->GetWindow(), view1->GetLevel(), view2->GetWindow(), view2->GetLevel()); manager->GenerateData(); view3->SetImage (manager->GetOutput()); view4->SetImage (manager->GetOutput()); view1->SyncResetCurrentPoint(); view1->Render(); view2->Render(); view3->Render(); view4->Render(); iren1->Start(); view1->Detach(); view2->Detach(); view3->Detach(); view4->Detach(); view1->Delete(); view2->Delete(); view3->Delete(); view4->Delete(); iren1->Delete(); iren2->Delete(); iren3->Delete(); iren4->Delete(); rwin1->Delete(); rwin2->Delete(); rwin3->Delete(); rwin4->Delete(); renderer1->Delete(); renderer2->Delete(); renderer3->Delete(); renderer4->Delete(); manager->Delete(); reader1->Delete(); reader2->Delete(); return 0; }