注:此文知识学习笔记,仅记录完整程序和实现结果,具体原理参见:
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.