0
点赞
收藏
分享

微信扫一扫

VTK_Learning_图像显示(vtkImageViewer2 & vtkImageActor)


1.vtkImageViewer2用于图像显示

在VTK早期版本中,提供了vtkImageViewer类来显示图像。随着版本的发展,目前vtkImageViewer2代替了vtkImageViewer进行图像显示。vtkImageViewer2中封装了VTK图像显示的管线,包括vtkActor,vtkRender,vtkRenderWindow,vtkInteractorStypeImage等对象,可以方便的完成图像显示和交互。该类提供的主要交互操作有:图像放缩,窗宽窗位调节,并提供切片选择,切片方向设置接口,尤其适合三维图像的显示。
 

#include <vtkAutoInit.h>        
VTK_MODULE_INIT(vtkRenderingOpenGL2);

#include <vtkSmartPointer.h>
#include <vtkMetaImageReader.h>
#include <vtkImageViewer2.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>

int main(int argc, char* argv[])
{
vtkSmartPointer<vtkMetaImageReader> reader =
vtkSmartPointer<vtkMetaImageReader>::New();
reader->SetFileName("data/brain.mhd");
reader->Update();

vtkSmartPointer<vtkImageViewer2> viewer =
vtkSmartPointer<vtkImageViewer2>::New();
viewer->SetInputConnection(reader->GetOutputPort());

//设置基本属性
viewer->SetSize(640,480);
viewer->SetColorLevel(500);
viewer->SetColorWindow(2000);
viewer->SetSlice(40);
viewer->SetSliceOrientationToXY();
viewer->Render();
viewer->GetRenderer()->SetBackground(1,1,1);
viewer->GetRenderWindow()->SetWindowName("ImageViewer2D");

vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
//设置交互属性
viewer->SetupInteractor(rwi);

rwi->Start();

return 0;
}

为了更好的说明vtkImageViewer2功能,使用一副三维医学图像为例进行说明。首先使用vtkMetaImageReader读入一个mhd图像,然后定义vtkImageViewer2对象显示图像。最后定义了一个vtkRenderWindowInteractor对象,并传递给vtkImageViewer2对象,用于完成鼠标、键盘等消息响应,便于进行图像的交互操作。
 

 2.vtkImageActor用于图像显示

vtkImageActor是一个三维图像渲染Actor,通过纹理映射将图像映射到一个多边形上进行显示。使用vtkImageActor较vtkImageViewer2要复杂一些,需要建立完整的渲染管线:包括vtkImageActor,vtkRender,vtkRenderWindow,vtkRenderWindowInteractor管线。另外,作为图像二维浏览器,不需要在三维空间中进行旋转操作,因此还需要为vtkRenderWindow定义一个vtkInteractorStyleImage对象。
 

#include <vtkAutoInit.h>        
VTK_MODULE_INIT(vtkRenderingOpenGL2);

#include <vtkSmartPointer.h>
#include <vtkBMPReader.h>
#include <vtkImageActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleImage.h>

int main()
{
vtkSmartPointer<vtkBMPReader> reader =
vtkSmartPointer<vtkBMPReader>::New();
reader->SetFileName("data/lena.bmp");
reader->Update();

vtkSmartPointer<vtkImageActor> actor =
vtkSmartPointer<vtkImageActor>::New();
actor->SetInputData(reader->GetOutput());

vtkSmartPointer<vtkRenderer> render =
vtkSmartPointer<vtkRenderer>::New();
render->AddActor(actor);
render->ResetCamera();
render->SetBackground(1,1,1);

vtkSmartPointer<vtkRenderWindow> window =
vtkSmartPointer<vtkRenderWindow>::New();
window->AddRenderer(render);
window->SetSize(640,480);
window->SetWindowName("ImageViewer3D");
window->Render();

vtkSmartPointer<vtkRenderWindowInteractor> rwi =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
vtkSmartPointer<vtkInteractorStyleImage> style =
vtkSmartPointer<vtkInteractorStyleImage>::New();
rwi->SetInteractorStyle(style);
rwi->SetRenderWindow(window);
rwi->Initialize();

rwi->Start();
return 0;
}

举报

相关推荐

0 条评论