VTK 图像数据,访问数组中的 1 个图像

VTK Image Data, access 1 image in an array

如果我有大小为 100x100x5 的 vtkImageData,是否有快速获取数组中的第 3 个图像的方法(即 5 个图像数组中的第 3 个 100x100 图像)?到目前为止我发现的是:

   uint16_t* newIm = static_cast<uint16_t*>(newImData->GetScalarPointer());  
   uint16_t* num;
   int index = 0;
   int frameNum = 3;
    for (int y = col-1; y >= 0 ; y--)
    {
        for (int x = 0; x < row; x++)
        {
            num =  static_cast<uint16_t*>(imData->GetScalarPointer(x,y,frameNum));
            newIm[index] = num[0];
            index++;
        }
    }

其中 imData 来自我程序中的另一个函数。 我试图避免双 for 循环,因为它不是很有效。 VTK 是否有更简单的方法来复制第 3 个 100x100 元素?

您可以使用 vtkExtractVOI 过滤器提取 vtkImageData 的一部分。请注意,虽然您将图像视为 5 张 100x100 图像,但在 VTK 中它是单个 5x100x100 3-d 图像。

要 select 从 3 维图像中提取 2 维 Z 切片,您需要执行如下操作:

vtkSmartPointer<vtkExtractVOI> extractVOI =
  vtkSmartPointer<vtkExtractVOI>::New();

extractVOI->SetInputConnection(source->GetOutputPort());

extractVOI>SetVOI(0, row-1, 0, col-1, z, z);

extractVOI->Update();

vtkImageData* extracted = extractVOI->GetOutput();

查看此 ExtractVOI 示例和 vtkExtractVOI 文档: https://vtk.org/Wiki/VTK/Examples/Cxx/ImageData/ExtractVOI https://vtk.org/doc/nightly/html/classvtkExtractVOI.html