我有一个3D体素图像,我想用VTK渲染。数据基本上以3D数组的形式给出,其中每个元素都是元组(r, g, b, a)
。以下是我用来生成数据的代码。
data_matrix = np.ndarray([500, 500, 500], dtype=([('r','u1'), ('g','u1'), ('b','u1'), ('a','u1')]))
data_matrix.fill((0, 0, 0, 0))
for i in range(0, 200):
for j in range(0, 200):
for k in range(100, 400):
data_matrix[i][j][k] = (255, 255, 255, 255)
dataImporter = vtk.vtkImageImport()
data_string = data_matrix.tostring()
dataImporter.CopyImportVoidPointer(data_string, len(data_string))
dataImporter.SetDataScalarTypeToUnsignedChar()
dataImporter.SetNumberOfScalarComponents(4)
dataImporter.SetDataExtent(0, 499, 0, 499, 0, 499)
dataImporter.SetWholeExtent(0, 499, 0, 499, 0, 499)
# generic rendering after this line
根据我的理解,(0, 0, 0, 0)
表示a = 0
,因此应该导致任何感兴趣的框都不透明。但是,这不会发生,导致下面的图像周围的部分透明。
我的猜测是我错误地设置了数据管道,但我并不完全确定错误。我还没有找到任何相关的例子,文档有点简洁。
答案 0 :(得分:0)
我能看到你如何呈现它,我不认为你的数据是错误的。尽管可能在您的数据矩阵中您只接受了3个值
data_matrix[i][j][k] = (255, 255, 255, 255)
你可能应该参加4,而且他们不应该都是255.