如果我的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元素?
您可以使用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