05-VTK在图像处理中的应用(2)

本文介绍了如何使用VTK的vtkImageData进行图像处理,包括图像信息访问和修改,如获取图像维数、原点和像素间隔。通过示例代码展示了如何设置图像的原点和像素间隔,并通过vtkImageChangeInformation来改变图像信息。同时,讨论了如何遍历和修改图像像素值,包括直接访问数据数组和使用vtkImageIterator迭代器方法。
摘要由CSDN通过智能技术生成

5.4 vtkImageData基本操作

图像处理离不开一些基本的图像数据操作,例如获取和修改图像的基本信息,访问和修改图像像素值,图像显示,图像类型转换等等。熟练掌握这些基本操作有助于使用VTK进行图像处理的快速开发。

 

5.4.1图像信息访问和修改

vtkImageData中提供了多个函数用于访问或者获取图像的基本信息,这些函数通常使用Set或者Get加上相应的信息名的形式,例如获取图像维数的方法定义为GetDimensions()。当然这里主要从类的层次上进行VTK的学习,这里不再具体赘述每个函数的基本名称和使用,用户可以查阅相应的类文档。下面通过一个例子来说明怎样访问图像的基本信息。程序运行如图5.8所示。

 

1:    vtkSmartPointer<vtkBMPReader>reader =

2:    vtkSmartPointer<vtkBMPReader>::New();

3:  reader->SetFileName ( "..\\lena.bmp");

4:  reader->Update();

5:  

6:   int dims[3];

7:  reader->GetOutput()->GetDimensions(dims);

8:   std::cout<<"图像维数:"<<dims[0]<<" "<<dims[1]<<""<<dims[2]<<std::endl;

9:  

10:  double origin[3];

11:  reader->GetOutput()->GetOrigin(origin);

12:  std::cout<<"图像原点:"<<origin[0]<<" "<<origin[1]<<""<<origin[2]<<std::endl;

13:  

14:  double spaceing[3];

15: reader->GetOutput()->GetSpacing(spaceing);

16:  std::cout<<"像素间隔:"<<spaceing[0]<<" "<<spaceing[1]<<""<<spaceing[2]<<std::endl;

17:  

18:  

19:  vtkSmartPointer<vtkImageViewer2>imageViewer =

20:   vtkSmartPointer<vtkImageViewer2>::New();

21: imageViewer->SetInputConnection(reader->GetOutputPort());

22: vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor=

23:   vtkSmartPointer<vtkRenderWindowInteractor>::New();

24: imageViewer->SetupInteractor(renderWindowInteractor);

25:  imageViewer->Render();

26: imageViewer->GetRenderer()->ResetCamera();

27:  imageViewer->Render();

28:  

29:  renderWindowInteractor->Start();

 

图5.8 VTK图像基本信息获取

 

上例中主要获取了图像的三个信息,图像维数,图像原点和像素间隔。VTK中二维和三维图像都用vtkImageData表示,因此第六行中定义图像维数为dims[3],然后利用GetDimensions()函数获取图像的维数;图像的原点和像素间隔都是物理空间数值,因此都是定义double类型。本例读入了二维lena图像,上图中显示了获取的图像信息。其中,图像维数为512*512*1,通过维数可以看成z方向的维数为1,说明该图像为二维图像;而图像的原点为(0,0,0)点,而像素间隔为(1,1,1)。

 

vtkChangeImageInformation

vtkImageData中提供了多个Set函数用于设置图像的基本信息。当对一个管线的输出修改图像信息后,如果管线重新Update,那么这些修改都会恢复回原来的值。而vtkChangeImageInformation可以作为管线中的一个filter来修改图像信息。利用这个filter可以修改图像的原点,像素间隔,以及范围起点(extent),另外还

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值