我目前有人头部的CT图像数据。它在YZ平面中包含256个切片,在XZ平面中包含256个切片,在XY平面中包含144个切片。
我计划在Android上使用OpenGL-ES 3.0来绘制XY平面中一个切片的点。问题是,我不确定如何将下面的ASCII数据加载到数组和缓冲区中。我已经收到了一小段文件。
# vtk DataFile Version 4.0
vtk output
ASCII
DATASET STRUCTURED_POINTS
DIMENSIONS 256 256 144
SPACING 1 1 1
ORIGIN 0 0 0
POINT_DATA 9437184
SCALARS ImageFile unsigned_short
LOOKUP_TABLE default
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
如何理解查找表中给出的数据?
编辑:我了解如何查看Paraview等程序中的数据。我想了解数据实际告诉我的内容,因此我可以创建自定义解析器并使用OpenGL-ES自己绘制2D切片。
答案 0 :(得分:3)
您是否尝试使用vtkDataReader将数据加载到VTK中?据我所知,由于结构点数据是vtkImageData的子类,因此您应该能够使用Python中的vtk执行以下简单操作。
import vtk
from vtk.util import numpy_support
path = 'path_to_file.vtk'
reader = vtk.vtkDataReader()
reader.SetFileName(path)
img = vtk.vtkImageData()
array = numpy_support.vtk_to_numpy(img)
#z_plane of choice
z = 10
plane = array[:,:,10]
如果在C ++中使用类似的代码,我只需使用GetScalarPointer或GetScalarComponentAsDouble函数并在选择的平面上循环,因为您知道GetDimensions()的维度并构建vtkImageData或使用vtkImageReslice函数并传递一个适当的转换