C# SimpleITK Image 转为 vtkImageData

本文介绍了如何将ITK中的图像转换为VTKImage,包括处理不同数据类型、调整空间轴方向以及使用vtkImage类进行坐标变换和深复制的过程。
摘要由CSDN通过智能技术生成

一定要注意ITK 中Image的数据类型,很多时候进行ITK计算用的 Float类型

  public void ITKImageToVTKImage(SitkImage itkIamge, ref vtkImageData vtkImage)
  {
      IntPtr ptr = itkIamge.GetBufferAsUInt8();
      VectorUInt32 size = itkIamge.GetSize();
      int len = (int)size[0] * (int)size[1] * (int)size[2];
      VectorDouble spacing = itkIamge.GetSpacing();
      uint w = itkIamge.GetWidth();
      uint h = itkIamge.GetHeight();
      uint d = itkIamge.GetDepth();

      vtkImageImport imageImport = new vtkImageImport();
      
      // imageImport.CopyImportVoidPointer(ptr, len);
      imageImport.SetImportVoidPointer(ptr, 0);
      imageImport.SetDataScalarTypeToUnsignedChar();
      imageImport.SetDataExtent(0, (int)size[0] - 1, 0, (int)size[1] - 1, 0, (int)size[2] - 1);
      imageImport.SetWholeExtent(0, (int)size[0] - 1, 0, (int)size[1] - 1, 0, (int)size[2] - 1);
      imageImport.SetDataSpacing(spacing[0], spacing[1], spacing[2]);
      imageImport.Update();

      // vtkImageFlip 一次只能转一个轴
      vtkImageFlip imageFlipY = new vtkImageFlip();
      imageFlipY.SetInputData(imageImport.GetOutput());

      // ITK 和 VTK 坐标 y z 是相反的,x-0, y-1, z-2
      imageFlipY.SetFilteredAxes(1);
      imageFlipY.Update();

      vtkImageFlip imageFlipZ = new vtkImageFlip();
      imageFlipZ.SetInputData(imageFlipY.GetOutput());

      // ITK 和 VTK 坐标 y z 是相反的,x-0, y-1, z-2
      imageFlipZ.SetFilteredAxes(2);
      imageFlipZ.Update();

      vtkImage.DeepCopy(imageFlipZ.GetOutput());

}

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值