我在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()
目前它甚至没有读取图像,但问题是,当我添加所有这些点时,我就会内存不足。有没有办法以块的形式保存这些点?
答案 0 :(得分:1)
看起来你正在尝试写一个1800x1800x500点(大约16亿点)的聚合数据。数百万可能是可能的,但不是数十亿,无论如何还没有。看起来您需要减少问题的大小。如果确实减小了问题大小,请使用vtkXMLPolyDataWriter。它有
writer->SetDataModeToBinary();
writer->SetCompressorTypeToZLib();
在将大型模型紧凑地编写到文件系统中非常有用。
或者,您可以将图像存储为单个体积(1800x1800x500,vtkImageData),如上面的注释所述,但仍然会有非常大的内存使用。然后你可以进行体积渲染或行进立方体以获得表面等。但是没有更多的细节是你想要实现的,它很难再回答。