VTK 实例33:图像重采样(降和升采样)

一杯清酒邀明月 / 2023-08-15 / 原文

  1 #include "vtkAutoInit.h" 
  2 VTK_MODULE_INIT(vtkRenderingOpenGL2);
  3 VTK_MODULE_INIT(vtkInteractionStyle);
  4 
  5 #include <vtkSmartPointer.h>
  6 #include <vtkImageData.h>
  7 #include <vtkRenderWindow.h>
  8 #include <vtkRenderWindowInteractor.h>
  9 #include <vtkInteractorStyleImage.h>
 10 #include <vtkRenderer.h>
 11 #include <vtkImageActor.h>
 12 #include <vtkBMPReader.h>
 13 #include <vtkImageShrink3D.h>
 14 #include <vtkImageMagnify.h>
 15 
 16 //测试图像:../data/lena.bmp
 17 int main(int argc, char* argv[])
 18 {
 19 
 20     vtkSmartPointer<vtkBMPReader> reader =
 21         vtkSmartPointer<vtkBMPReader>::New();
 22     reader->SetFileName ( "lena.bmp" );
 23     reader->Update();
 24 
 25     vtkSmartPointer<vtkImageShrink3D> shrinkFilter = 
 26         vtkSmartPointer<vtkImageShrink3D>::New();
 27     shrinkFilter->SetInputConnection(reader->GetOutputPort());
 28     shrinkFilter->SetShrinkFactors(16,16,1);
 29     shrinkFilter->Update();
 30 
 31     vtkSmartPointer<vtkImageMagnify> magnifyFilter =
 32         vtkSmartPointer<vtkImageMagnify>::New();
 33     magnifyFilter->SetInputConnection(reader->GetOutputPort());
 34     magnifyFilter->SetMagnificationFactors(10,10,1);
 35     magnifyFilter->Update();
 36 
 37     int originalDims[3];
 38     reader->GetOutput()->GetDimensions(originalDims);
 39 
 40     double originalSpace[3];
 41     reader->GetOutput()->GetSpacing(originalSpace);
 42 
 43     int shrinkDims[3];
 44     shrinkFilter->GetOutput()->GetDimensions(shrinkDims);
 45 
 46     double shrinkSpace[3];
 47     shrinkFilter->GetOutput()->GetSpacing(shrinkSpace);
 48 
 49     int magnifyDims[3];
 50     magnifyFilter->GetOutput()->GetDimensions(magnifyDims);
 51 
 52     double magnifySpace[3];
 53     magnifyFilter->GetOutput()->GetSpacing(magnifySpace);
 54 
 55     std::cout<<"原图图像维数      :"<<originalDims[0] << " "<<originalDims[1]<<" "<<originalDims[2]<<std::endl;
 56     std::cout<<"原图图像像素间隔  :"<<originalSpace[0] << " "<<originalSpace[1]<<" "<<originalSpace[2]<<std::endl;
 57     std::cout<<"降采样图像维数    :"<<shrinkDims[0] << " "<<shrinkDims[1]<<" "<<shrinkDims[2]<<std::endl;
 58     std::cout<<"降采样图像像素间隔:"<<shrinkSpace[0] << " "<<shrinkSpace[1]<<" "<<shrinkSpace[2]<<std::endl;
 59     std::cout<<"升采样图像维数    :"<<magnifyDims[0] << " "<<magnifyDims[1]<<" "<<magnifyDims[2]<<std::endl;
 60     std::cout<<"升采样图像像素间隔:"<<magnifySpace[0] << " "<<magnifySpace[1]<<" "<<magnifySpace[2]<<std::endl;
 61 
 62     vtkSmartPointer<vtkImageActor> originalActor =
 63         vtkSmartPointer<vtkImageActor>::New();
 64     originalActor->SetInputData(reader->GetOutput());
 65 
 66     vtkSmartPointer<vtkImageActor> shrinkActor =
 67         vtkSmartPointer<vtkImageActor>::New();
 68     shrinkActor->SetInputData(shrinkFilter->GetOutput());
 69 
 70     vtkSmartPointer<vtkImageActor> magnifyActor =
 71         vtkSmartPointer<vtkImageActor>::New();
 72     magnifyActor->SetInputData(magnifyFilter->GetOutput());
 73 
 74     double originalViewport[4] = {0.0, 0.0, 0.33, 1.0};
 75     double shrinkViewport[4] = {0.33, 0.0, 0.66, 1.0};
 76     double magnifyViewport[4] = {0.66, 0.0, 1.0, 1.0};
 77 
 78     vtkSmartPointer<vtkRenderer> originalRenderer =
 79         vtkSmartPointer<vtkRenderer>::New();
 80     originalRenderer->SetViewport(originalViewport);
 81     originalRenderer->AddActor(originalActor);
 82     originalRenderer->ResetCamera();
 83     originalRenderer->SetBackground(1.0, 1.0, 1.0);
 84 
 85     vtkSmartPointer<vtkRenderer> shrinkRenderer =
 86         vtkSmartPointer<vtkRenderer>::New();
 87     shrinkRenderer->SetViewport(shrinkViewport);
 88     shrinkRenderer->AddActor(shrinkActor);
 89     shrinkRenderer->ResetCamera();
 90     shrinkRenderer->SetBackground(1.0, 1.0, 1.0);
 91 
 92     vtkSmartPointer<vtkRenderer> magnifyRenderer =
 93         vtkSmartPointer<vtkRenderer>::New();
 94     magnifyRenderer->SetViewport(magnifyViewport);
 95     magnifyRenderer->AddActor(magnifyActor);
 96     magnifyRenderer->ResetCamera();
 97     magnifyRenderer->SetBackground(1.0, 1.0, 1.0);
 98 
 99     vtkSmartPointer<vtkRenderWindow> renderWindow =
100         vtkSmartPointer<vtkRenderWindow>::New();
101     renderWindow->AddRenderer(originalRenderer);
102     renderWindow->AddRenderer(shrinkRenderer);
103     renderWindow->AddRenderer(magnifyRenderer);
104     renderWindow->SetSize(640, 320);
105     renderWindow->Render();
106     renderWindow->SetWindowName("ImageShrinkMagnifyExample");
107 
108     vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
109         vtkSmartPointer<vtkRenderWindowInteractor>::New();
110     vtkSmartPointer<vtkInteractorStyleImage> style =
111         vtkSmartPointer<vtkInteractorStyleImage>::New();
112 
113     renderWindowInteractor->SetInteractorStyle(style);
114     renderWindowInteractor->SetRenderWindow(renderWindow);
115     renderWindowInteractor->Initialize();
116     renderWindowInteractor->Start();
117 
118     return EXIT_SUCCESS;
119 }