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;
}