【问题标题】:writing huge number of points to vtk file format将大量点写入 vtk 文件格式
【发布时间】:2014-10-11 12:26:39
【问题描述】:

我正在用 python 编写脚本,它解析大约 500 个宽度为 1810px 和高度为 1808px 的图像(3d 对象的切片)。 我想从所有这些图像中写入点(原始颜色)并将它们保存为 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()

现在它甚至没有读取图像,但问题是当我添加所有这些点时,我的内存不足。有没有办法分块保存这些点?

【问题讨论】:

标签: python vtk


【解决方案1】:

看起来您正在尝试编写大约 1800x1800x500 点(约 16 亿点)的多数据。数百万可能是可能的,但不是数十亿,反正还不是。看起来你需要减少你的问题规模。如果确实减少了问题大小,请使用 vtkXMLPolyDataWriter。它有

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

这对于将大型模型紧凑地写入文件系统很有用。

或者,您可以将图像存储为单个卷(1800x1800x500,vtkImageData),正如上面的评论提到的那样,仍然会有非常大的内存使用。然后您可以进行体积渲染或行进立方体以获得表面等。但是如果没有更多细节来说明您想要实现的目标,就很难进一步回答了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2015-04-28
    • 2018-03-20
    • 1970-01-01
    相关资源
    最近更新 更多