将大量积分写入vtk文件格式

时间:2014-09-24 16:47:54

标签: python vtk

我在python中编写脚本,它解析了大约500张图像(3d对象的切片),宽度为1810px,高度为1808px。 我想从所有这些图像中写入点(带原始颜色)并将它们保存为vtk文件格式。 出于测试目的,我从vtk修改了示例:

import vtk
from vtk import *

#setup points and vertices
Points = vtk.vtkPoints()
Vertices = vtk.vtkCellArray()

for x in xrange(0, 1808):
    for y in xrange(0, 1810):
        for z in xrange(0, 544):
            id = Points.InsertNextPoint(x, y, z)
            Vertices.InsertNextCell(1)
            Vertices.InsertCellPoint(id)


polydata = vtk.vtkPolyData()
polydata.SetPoints(Points)
polydata.SetVerts(Vertices)
polydata.Modified()
if vtk.VTK_MAJOR_VERSION <= 5:
    polydata.Update()

writer = vtk.vtkXMLPolyDataWriter()
writer.SetFileName("TriangleColoredPoints.vtp")
if vtk.VTK_MAJOR_VERSION <= 5:
    writer.SetInput(polydata)
else:
    writer.SetInputData(polydata)
writer.Write()

目前它甚至没有读取图像,但问题是,当我添加所有这些点时,我就会内存不足。有没有办法以块的形式保存这些点?

1 个答案:

答案 0 :(得分:1)

看起来你正在尝试写一个1800x1800x500点(大约16亿点)的聚合数据。数百万可能是可能的,但不是数十亿,无论如何还没有。看起来您需要减少问题的大小。如果确实减小了问题大小,请使用vtkXMLPolyDataWriter。它有

writer->SetDataModeToBinary();
writer->SetCompressorTypeToZLib();

在将大型模型紧凑地编写到文件系统中非常有用。

或者,您可以将图像存储为单个体积(1800x1800x500,vtkImageData),如上面的注释所述,但仍然会有非常大的内存使用。然后你可以进行体积渲染或行进立方体以获得表面等。但是没有更多的细节是你想要实现的,它很难再回答。