VTK 圖像處理_顯示(vtkImageViewer2 & vtkImageActor)


1.vtkImageViewer2用於圖像顯示實例分析

  在VTK早期版本中,提供了vtkImageViewer類來顯示圖像。隨着版本的發展,目前vtkImageViewer2代替了vtkImageViewer進行圖像顯示。vtkImageViewer2中封裝了VTK圖像顯示的管線,包括vtkActor,vtkRender,vtkRenderWindow,vtkInteractorStypeImage等對象,可以方便的完成圖像顯示和交互。該類提供的主要交互操作有:圖像放縮,窗寬窗位調節,並提供切片選擇,切片方向設置接口,尤其適合三維圖像的顯示。

 1 #include <vtkAutoInit.h>        
 2 VTK_MODULE_INIT(vtkRenderingOpenGL);  3  
 4 #include <vtkSmartPointer.h>
 5 #include <vtkMetaImageReader.h>
 6 #include <vtkImageViewer2.h>
 7 #include <vtkRenderer.h>
 8 #include <vtkRenderWindow.h>
 9 #include <vtkRenderWindowInteractor.h>
10  
11 int main(int argc, char* argv[]) 12 { 13     vtkSmartPointer<vtkMetaImageReader> reader =
14         vtkSmartPointer<vtkMetaImageReader>::New(); 15     reader->SetFileName("data/brain.mhd"); 16     reader->Update(); 17  
18     vtkSmartPointer<vtkImageViewer2> viewer =
19         vtkSmartPointer<vtkImageViewer2>::New(); 20     viewer->SetInputConnection(reader->GetOutputPort()); 21  
22     //設置基本屬性
23     viewer->SetSize(640,480); 24     viewer->SetColorLevel(500); 25     viewer->SetColorWindow(2000); 26     viewer->SetSlice(40); 27     viewer->SetSliceOrientationToXY(); 28     viewer->Render(); 29     viewer->GetRenderer()->SetBackground(1,1,1); 30     viewer->GetRenderWindow()->SetWindowName("ImageViewer2D"); 31  
32     vtkSmartPointer<vtkRenderWindowInteractor> rwi =
33         vtkSmartPointer<vtkRenderWindowInteractor>::New(); 34     //設置交互屬性
35     viewer->SetupInteractor(rwi); 36  
37     rwi->Start(); 38  
39     return 0; 40 }

  為了更好的說明vtkImageViewer2功能,使用一副三維醫學圖像為例進行說明。首先使用vtkMetaImageReader讀入一個mhd圖像,然后定義vtkImageViewer2對象顯示圖像。最后定義了一個vtkRenderWindowInteractor對象,並傳遞給vtkImageViewer2對象,用於完成鼠標、鍵盤等消息響應,便於進行圖像的交互操作。

  其中也設置了四個參數,窗位(ColorLevel)、窗寬(ColorWindow)、切片(Slice)和切片方向(Orientation)。按下鼠標左鍵拖動鼠標,可以調節圖像的窗寬窗位,從而顯示不同灰度范圍內容;按下鼠標右鍵拖動鼠標可以放縮圖像。當然這些交互操作可以由用戶根據需要自己定義vtkInteractorStyle子類,並響應相應的操作。

  而顯示三維圖像時,需要確定當前顯示切片和方向。vtkImageViewer2提供了SetSlice()函數設置切片號,SetSliceOrientationToXY()則將切片的方向設置為垂直XY平面方向。此外還可以設置為垂直YZ或者XZ平面方向,其對應函數分別為SetSliceOrientationToYZ()和SetSliceOrientationToXZ()。默認情況下切片方向為垂直於XY平面即沿着Z軸方向,根據設置的切片號獲取Z軸方向的具體切片進行顯示。

 

2.vtkImageActor用於圖像顯示

  vtkImageActor是一個三維圖像渲染Actor,通過紋理映射將圖像

 1 #include <vtkAutoInit.h>        
 2 VTK_MODULE_INIT(vtkRenderingOpenGL);  3  
 4 #include <vtkSmartPointer.h>
 5 #include <vtkBMPReader.h>
 6 #include <vtkImageActor.h>
 7 #include <vtkRenderer.h>
 8 #include <vtkRenderWindow.h>
 9 #include <vtkRenderWindowInteractor.h>
10 #include <vtkInteractorStyleImage.h>
11  
12 int main() 13 { 14     vtkSmartPointer<vtkBMPReader> reader =
15         vtkSmartPointer<vtkBMPReader>::New(); 16     reader->SetFileName("data/lena.bmp"); 17     reader->Update(); 18  
19     vtkSmartPointer<vtkImageActor> actor =
20         vtkSmartPointer<vtkImageActor>::New(); 21     actor->SetInputData(reader->GetOutput()); 22  
23     vtkSmartPointer<vtkRenderer> render =
24         vtkSmartPointer<vtkRenderer>::New(); 25     render->AddActor(actor); 26     render->ResetCamera(); 27     render->SetBackground(1,1,1); 28  
29     vtkSmartPointer<vtkRenderWindow> window =
30         vtkSmartPointer<vtkRenderWindow>::New(); 31     window->AddRenderer(render); 32     window->SetSize(640,480); 33     window->SetWindowName("ImageViewer3D"); 34     window->Render(); 35  
36     vtkSmartPointer<vtkRenderWindowInteractor> rwi =
37         vtkSmartPointer<vtkRenderWindowInteractor>::New(); 38     vtkSmartPointer<vtkInteractorStyleImage> style =
39         vtkSmartPointer<vtkInteractorStyleImage>::New(); 40     rwi->SetInteractorStyle(style); 41     rwi->SetRenderWindow(window); 42     rwi->Initialize(); 43  
44     rwi->Start(); 45     return 0; 46 }

  在讀入圖像后,依次建立vtkImageActor,vtkRender,vtkRenderWindow,vtkRenderWindowInteractor,並組裝為管線。為了屏蔽旋轉操作,建立vtkInteractorStyleImage對象,並通過rwi->SetInteractorStyle(style)設置交互對象。需要注意的是,vtkImageActor接收的圖像vtkImageData數據類型必須為unsigned char類型,因此在顯示之前,必要的時候需要利用vtkImageCast將圖像數據類型轉換為unsigned char。

顯示結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM