5.3.3 图像类型转换

注:此文知识学习笔记,仅记录完整程序和实现结果,具体原理参见:

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.

所用软件:vtk7.0+visual studio 2013

猜你喜欢

转载自blog.csdn.net/kateyabc/article/details/80595240
今日推荐