Slicer学习笔记(二十四)volume获取vtkOrientedImageData 数据

Slicer学习笔记(二十四)volume获取vtkOrientedImageData 数据

1、volume获取vtkImageData 数据

vtkImageData* inVolume = inVolumeNode->GetImageData();

2、volume获取vtkOrientedImageData 数据

vtkOrientedImageData* masterImageData = vtkSlicerSegmentationsModuleLogic::CreateOrientedImageDataFromVolumeNode(vtkMRMLScalarVolumeNode::SafeDownCast(dataVolume), nullptr); 

CreateOrientedImageDataFromVolumeNode函数代码来自

\slicersources-src\Modules\Loadable\Segmentations\Logic\vtkSlicerSegmentationsModuleLogic.cxx
vtkOrientedImageData* vtkSlicerSegmentationsModuleLogic::CreateOrientedImageDataFromVolumeNode(vtkMRMLScalarVolumeNode* volumeNode, vtkMRMLTransformNode* outputParentTransformNode /* = nullptr */)
{
    
    
  if (!volumeNode || !volumeNode->GetImageData())
    {
    
    
    vtkGenericWarningMacro("vtkSlicerSegmentationsModuleLogic::CreateOrientedImageDataFromVolumeNode: Invalid volume node");
    return nullptr;
    }

  vtkOrientedImageData* orientedImageData = vtkOrientedImageData::New();
  orientedImageData->vtkImageData::DeepCopy(volumeNode->GetImageData());

  vtkSmartPointer<vtkMatrix4x4> ijkToRasMatrix = vtkSmartPointer<vtkMatrix4x4>::New();
  volumeNode->GetIJKToRASMatrix(ijkToRasMatrix);
  orientedImageData->SetGeometryFromImageToWorldMatrix(ijkToRasMatrix);

  // Apply parent transform of the volume node if any
  if (volumeNode->GetParentTransformNode() != outputParentTransformNode)
    {
    
    
    vtkSmartPointer<vtkGeneralTransform> nodeToOutputTransform = vtkSmartPointer<vtkGeneralTransform>::New();
    vtkMRMLTransformNode::GetTransformBetweenNodes(volumeNode->GetParentTransformNode(), outputParentTransformNode, nodeToOutputTransform);
    vtkOrientedImageDataResample::TransformOrientedImage(orientedImageData, nodeToOutputTransform);
    }

  return orientedImageData;
}

猜你喜欢

转载自blog.csdn.net/juluwangriyue/article/details/121018324