Python:numpy数组到vtk stl-file创建者。如何设置间距?

时间:2016-05-17 18:41:55

标签: python arrays numpy vtk

亲爱的Python和VTK用户。我从巨大的3D numpy阵列中挣扎了一代正确的STL。 STL文件是使用VTK库生成的,但是当我在CAD软件中打开它时,我可以观察到不正确的形状(由于缺少间距)。似乎所有这些体素'它们的大小(1,1,1),但它们的大小(0.48,0.48,0.625) - 数据关注像素间距缺失。我是一名新手程序员,我几乎不懂python和VTK,所以我需要你的帮助。当我将numpy数组转换为VTK时,如何添加有关像素间距的信息? 已找到答案。

#my_numpy_array is defined in other part of my script

stack=my_numpy_array[:,:,:]
dataImporter = vtk.vtkImageImport()
data_string = stack.tostring()

dataImporter.CopyImportVoidPointer(data_string, len(data_string))
dataImporter.SetDataScalarTypeToUnsignedChar()
dataImporter.SetNumberOfScalarComponents(1)


w, d, h = stack.shape
dataImporter.SetDataExtent(0, h-1,0, d-1, 0, w-1)
dataImporter.SetWholeExtent(0, h-1,0, d-1, 0, w-1)

#here is the line that I was missing:
dataImporter.SetDataSpacing( 0.625, 0.48, 0.48)



threshold = vtk.vtkImageThreshold ()
threshold.SetInputConnection(dataImporter.GetOutputPort())
threshold.ThresholdByLower(128)
threshold.ReplaceInOn()
threshold.SetInValue(0)
threshold.ReplaceOutOn()
threshold.SetOutValue(1)
threshold.Update()

"""imageData = vtk.vtkImageData()
imageData.SetSpacing(0.48,0.48,0.625)
imageData.SetInputConnection(threshold.GetOutputPort())
imageData.Update())"""

dmc = vtk.vtkDiscreteMarchingCubes()
dmc.SetInputConnection(threshold.GetOutputPort())
dmc.GenerateValues(1, 1, 1)
dmc.Update()

writer = vtk.vtkSTLWriter()
writer.SetInputConnection(dmc.GetOutputPort())
writer.SetFileTypeToBinary()
writer.SetFileName("file.stl")
writer.Write()

我尝试使用vtkImageData(),然而,它没有用。如果你能帮助我解决这场巨大的斗争,我将非常高兴。

0 个答案:

没有答案