[text] IntVolumetoVtkImageData

Viewer

copydownloadembedprintName: IntVolumetoVtkImageData
  1. vtkSmartPointer<vtkImageData> IntVolumeToVtkImageData(
  2.    const IntVolume *volume, vtkSmartPointer<vtkTransform> transform)
  3. {
  4.    return ItkImageToVtkImageData<IntVolume>(volume, transform);
  5. }
  6.  
  7. template <typename NDImageType>
  8. vtkSmartPointer<vtkImageData> ItkImageToVtkImageData(const typename NDImageType *ndImage, 
  9.                                                      vtkSmartPointer<vtkTransform> transform)
  10. {
  11.    typedef itk::ImageToVTKImageFilter<NDImageType> ConnectorType;
  12.    ConnectorType::Pointer connector = ConnectorType::New();
  13.    connector->SetInput(ndImage);
  14.    connector->Update();
  15.    vtkImageData *vtkData = connector->GetOutput();
  16.    vtkSmartPointer<vtkImageData> vtkDataCopy = vtkSmartPointer<vtkImageData>::New();
  17.    vtkDataCopy->DeepCopy(vtkData);
  18.  
  19.    if (transform)
  20.    {
  21.       // if a vtkTransform is specified then:
  22.       // 1. erase origin from vtkDataCopy
  23.       // 2. fill transform with direction and origin extracted from ndImage
  24.  
  25.       vtkSmartPointer<vtkMatrix4x4> mat = vtkSmartPointer<vtkMatrix4x4>::New();
  26.       mat->Identity();
  27.  
  28.       // set the rotation
  29.       NDImageType::DirectionType direction = ndImage->GetDirection();
  30.       for (int i = 0; i < 3; ++i)
  31.       {
  32.          for (int j = 0; j < 3; ++j)
  33.          {
  34.             mat->SetElement(i, j, direction[i][j]);
  35.          }
  36.       }
  37.  
  38.       // erase origin from vtkDataCopy and set the origin in the transform
  39.       vtkDataCopy->SetOrigin(0, 0, 0);
  40.       NDImageType::PointType origin = ndImage->GetOrigin();
  41.       unsigned int dimension = NDImageType::GetImageDimension();
  42.       for (unsigned int i = 0; i < dimension; ++i)
  43.       {
  44.          mat->SetElement(i, 3, origin[i]);
  45.       }
  46.  
  47.       transform->SetMatrix(mat);
  48.    }
  49.  
  50.    return vtkDataCopy;
  51. }

Editor

You can edit this paste and save as new:


File Description
  • IntVolumetoVtkImageData
  • Paste Code
  • 17 Feb-2023
  • 1.74 Kb
You can Share it: