VTK图像数据,访问阵列中的1张图像

问题描述 投票:0回答:1

如果我的vtkImageData大小为100x100x5,是否有一种快速的方法来获取数组中的第三张图像(即5图像数组中的第三张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是否有更简单的方法来复制第三个100x100元素?

c++ image vtk
1个回答
0
投票

您可以使用vtkExtractVOI过滤器来扩展vtkImageData的子部分。请注意,尽管您将图像视为5个100x100图像,但在VTK中,它是一个5x100x100 3维图像。

要从3D图像中选择2D 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/ExtractVOIhttps://vtk.org/doc/nightly/html/classvtkExtractVOI.html

© www.soinside.com 2019 - 2024. All rights reserved.