本文主要是介绍vtkNIFTIImageReader读写方位以及原点信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用vtkNIFTIImageReader读取体数据为vtkImageData时只会携带spacing信息,方向和原点信息不会写入,需要获取QFormMatrix进行解析。
1、方向及原点读取
vtkSmartPointer<vtkNIFTIImageReader> niiReader = vtkSmartPointer<vtkNIFTIImageReader>::New();niiReader->SetFileName(path.c_str());niiReader->Update();vtkMatrix4x4* transform_matrix = niiReader->GetQFormMatrix();
获取4*4矩阵后使用GetElement(int i, int j)获取索引值,前三列为三个轴的方向,最后一列为偏移量也就是数据原点位置。
vtk里面采用的RAS右手坐标系,dicom坐标系以及主流看图ITK-Snap等软件采用的LPS坐标系,所以原点等信息需要换算一下。
图一:dicom坐标系
2、方向及原点写入
例:LPS坐标系信息写入
vtkSmartPointer<vtkMatrix4x4> matrix = vtkSmartPointer<vtkMatrix4x4>::New(); // 坐标系设为LPSconst double matrix_elemnt[16] = {-1, 0, 0, origin[0] * -1,0, -1, 0, origin[1] * -1,0, 0, 1, origin[2] * 1,0, 0, 0, 1};matrix->DeepCopy(matrix_elemnt);vtkSmartPointer<vtkNIFTIImageWriter> niiWriter = vtkSmartPointer<vtkNIFTIImageWriter>::New();niiWriter->SetFileName(file_name.c_str());niiWriter->SetInputData(data);niiWriter->SetQFormMatrix(matrix);niiWriter->Write();
这篇关于vtkNIFTIImageReader读写方位以及原点信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!