C++ 使用VTK的阈值图像数据(vtkImageThreshold)

C++ 使用VTK的阈值图像数据(vtkImageThreshold),c++,vtk,C++,Vtk,我有一个三维向量场,我存储在一个vtkImageData对象中。vtkImageData对象包含两个数组: 三分量vtkDoubleArray(矢量x、y和z分量) 包含单独数量的单分量vtkDoubleArray 我想提取两个数组的对应元素,其中1分量数组的值位于一定范围内。以下是我尝试过的: vtkSmartPointer<vtkImageThreshold> threshold = vtkSmartPointer<vtkImageThreshold>

我有一个三维向量场,我存储在一个vtkImageData对象中。vtkImageData对象包含两个数组:

  • 三分量vtkDoubleArray(矢量x、y和z分量)
  • 包含单独数量的单分量vtkDoubleArray
  • 我想提取两个数组的对应元素,其中1分量数组的值位于一定范围内。以下是我尝试过的:

    vtkSmartPointer<vtkImageThreshold> threshold =
            vtkSmartPointer<vtkImageThreshold>::New();
    threshold->SetInputData(image);
    threshold->SetInputArrayToProcess(1, image->GetInformation()); // 1 is the Energy array index
    threshold->ThresholdBetween(1e-22, 2e-22);
    threshold->Update();
    
    vtkSmartPointer<vtkImageData> thresholdedImage = threshold->GetOutput();
    
    vtksmart指针阈值=
    vtkSmartPointer::New();
    阈值->设置输入数据(图像);
    阈值->设置InputArrayToProcess(1,图像->获取信息());//1是能量数组索引
    阈值->阈值之间(1e-22,2e-22);
    阈值->更新();
    vtkSmartPointer ThresholdeImage=threshold->GetOutput();
    
    我也尝试过使用vtkThresholdPoints,但没有效果。任何建议都将不胜感激。

    看起来我可以使用:

    vtkSmartPointer阈值=
    vtkSmartPointer::New();
    阈值->设置输入数据(图像);
    阈值->阈值之间(1e-21,2e-21);
    阈值->设置InputArrayToProcess(0,0,0,
    vtkDataObject::字段关联点,“能量”);
    阈值->更新();
    vtkSmartPointer threshold=threshold->GetOutput();
    
    我没有意识到这种方法是适用的,但它似乎是适用的。这确实将我的数据类型从
    vtkImageData
    更改为
    vtkPolyData
    ,我几乎不知道
    vtkThresholdPoints::SetInputArrayToProcess()的参数是什么意思。然而,它似乎完成了任务。我很高兴听到任何其他建议

    vtkSmartPointer<vtkThresholdPoints> threshold = 
            vtkSmartPointer<vtkThresholdPoints>::New();
    threshold->SetInputData(image);
    threshold->ThresholdBetween(1e-21, 2e-21);
    threshold->SetInputArrayToProcess(0, 0, 0, 
            vtkDataObject::FIELD_ASSOCIATION_POINTS, "Energy");
    threshold->Update();
    
    vtkSmartPointer<vtkPolyData> thresholded = threshold->GetOutput();