vtkNIFTIImageReader读写方位以及原点信息

        使用vtkNIFTIImageReader读取体数据为vtkImageData时只会携带spacing信息,方向和原点信息不会写入,需要获取QFormMatrix进行解析。

1、方向及原点读取
	vtkSmartPointer niiReader = vtkSmartPointer::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坐标系,所以原点等信息需要换算一下。

        vtkNIFTIImageReader读写方位以及原点信息_第1张图片

                                                   图一:dicom坐标系

2、方向及原点写入

        例:LPS坐标系信息写入

  vtkSmartPointer matrix = vtkSmartPointer::New();  // 坐标系设为LPS
    const 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 niiWriter = vtkSmartPointer::New();
    niiWriter->SetFileName(file_name.c_str());
    niiWriter->SetInputData(data);
    niiWriter->SetQFormMatrix(matrix);
    niiWriter->Write();

你可能感兴趣的:(VTK,图形渲染,c++)