注:此文知识学习笔记,仅记录完整程序和实现结果,具体原理参见:
https://blog.csdn.net/www_doling_net/article/details/8541534
1.vtkImageCast
这个类进行类型转换时,只是将类型进行强制转换,而没有进行比例的缩放,因此使用起来会比较受限,因此VTK中时不推荐使用这个类的,例如一副double类型的图像,图像值的范围[-1,1]。如果需要将图像转化为unsigned char类型,这种方法是不可行的!
2.vtkImageShiftScale
这个类时用起来要比上一类更加的灵活。他可以指定偏移和比例参数来对输入图像数据进行操作,例如一副double类型的图像,其数值范围为[-1,1],如果将其转换为unsigned char类型,需要设置shift=+1,Scale=127.5;那么输入图像的数据-1可以被映射为(-1+1)*127.5=0;+1可以被映射为(1+1)*127.5=255。具体使用方法如下所示:
#include"vtkSmartPointer.h"
#include"vtkImageCast.h"
#include"vtkImageShiftScale.h"
#include"vtkBMPReader.h"
#include"vtkMetaImageReader.h"
#include"vtkImageViewer2.h"
#include"vtkRenderer.h"
#include"vtkRenderWindow.h"
#include"vtkRenderWindowInteractor.h"
int main(){
vtkSmartPointer<vtkMetaImageReader> reader = vtkSmartPointer<vtkMetaImageReader>::New();
reader->SetFileName("head.mhd");
reader->Update();
//第一种类型转换方案
vtkSmartPointer<vtkImageCast> imgCast = vtkSmartPointer<vtkImageCast>::New();
imgCast->SetInputData((vtkDataObject *)reader->GetOutput());
imgCast->SetOutputScalarTypeToFloat();
//第二种转换方式
vtkSmartPointer<vtkImageShiftScale> imgShiftScale = vtkSmartPointer<vtkImageShiftScale>::New();
imgShiftScale->SetInputData((vtkDataObject *)reader->GetOutput());
imgShiftScale->SetOutputScalarTypeToFloat();
vtkSmartPointer<vtkImageViewer2> imgViewer = vtkSmartPointer<vtkImageViewer2>::New();
imgViewer->SetInputConnection(imgShiftScale->GetOutputPort()); //imgShiftScale->GetOutputPort()在这里设置用第一种还是第二种类型转换方式
vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
imgViewer->SetupInteractor(rwi);
imgViewer->SetColorLevel(500);
imgViewer->SetColorWindow(2000);
imgViewer->SetSlice(20);
imgViewer->SetSliceOrientationToXY();
imgViewer->Render();
imgViewer->GetRenderer()->SetBackground(1, 1, 1);
imgViewer->SetSize(640,480);
imgViewer->GetRenderWindow()->SetWindowName("imageTypeTrans");
rwi->Start();
return EXIT_SUCCESS;
}
运行结果:
参考资料:
1.《The Visualization Toolkit – AnObject-Oriented Approach To 3D Graphics (4th Edition)》
2. 张晓东, 罗火灵. VTK图形图像开发进阶[M]. 机械工业出版社, 2015.