在Python的3D图像处理中,通常用numpy array来进行非常方便的计算或者转化,这里记录一下numpy数据的VTK可视化基本流程,包括面绘制(Surfase Rendering)和体绘制(Volume Rendering)。除去数据格式转化,面绘制和体绘制在C++中也是类似的处理方法。

numpy数据转成vtkImageData

首先得把numpy数据转成vtk里可以用的格式:numpy array -> vtkIImageData。这里的numpy array是一个离散的三维空间数据场,0代表背景,非0代表前景点。

方法一:numpy_to_vtk

可以直接使用vtk.util.numpy_support里的转换方法,非常方便。这是它的说明文档:

numpy_to_vtk(num_array, deep=0, array_type=None)Converts a contiguous real numpy Array to a VTK array object.This function only works for real arrays that are contiguous.Complex arrays are NOT handled.  It also works for multi-componentarrays.  However, only 1, and 2 dimensional arrays are supported.This function is very efficient, so large arrays should not be aproblem.If the second argument is set to 1, the array is deep-copied fromfrom numpy. This is not as efficient as the default behavior(shallow copy) and uses more memory but detaches the two arrayssuch that the numpy array can be released.WARNING: You must maintain a reference to the passed numpy array, ifthe numpy data is gc'd and VTK will point to garbage which will inthe best case give you a segfault.Parameters----------- num_array :  a contiguous 1D or 2D, real numpy array.

对于3D array,可以用flatten或者ravel先转成1D array就可以使用了。这里的1D array得是C order(row-major order),最好使用deep copy以免出现一些内存管理的问题。

import numpy as np
import vtk
from vtk.util import numpy_support# numpy_data is a 3D numpy array
shape = numpy_data.shape[::-1]
vtk_data = numpy_support.numpy_to_vtk(numpy_data.ravel(), 1, vtk.VTK_SHORT)vtk_image_data = vtk.vtkImageData()
vtk_image_data.SetDimensions(shape)
vtk_image_data.SetSpacing(spacing)
vtk_image_data.SetOrigin(origin)
vtk_image_data.GetPointData().SetScalars(vtk_data)# vtk_image_data: ready to use

方法二:vtkImageImport

使用Python也可以用vtkImageImport来直接导入C array,就是要先把numpy array变成string。

import numpy as np
import vtknumpy_str = numpy_data.astype(np.int16).tostring()
x_extent = numpy_data.shape[2]
y_extent = numpy_data.shape[1]
z_extent = numpy_data.shape[0]image_import = vtk.vtkImageImport()
image_import.SetImportVoidPointer(numpy_str, len(numpy_str))
# 也可以使用CopyImportVoidPointer() 会copy一份numpy_str
image_import.SetWholeExtent(0, x_extent-1, 0, y_extent-1, 0, z_extent-1)
image_import.SetDataExtent(0, x_extent-1, 0, y_extent-1, 0, z_extent-1)
image_import.SetDataScalarTypeToShort() # 根据需求指定数据类型
image_import.SetNumberOfScalarComponents(1)
# 如果是RGB数据的话,SetNumberOfScalarComponents(3)
image_import.Update()vtk_image_data = vtk.vtkImageData()
vtk_image_data.SetSpacing(spacing)
vtk_image_data.SetOrigin(origin)# vtk_image_data: ready to use

绘制

参考:https://www.cnblogs.com/XDU-Lakers/p/10822840.html
这个作者总结的很全面,还有代码示例

Python VTK numpy数据3D可视化相关推荐

  1. Python使用matplotlib进行3D可视化分析:3d柱状图、3d直方图、3d线框图、3d曲面图、3d翼面图(莫比乌斯环)

    Python使用matplotlib进行3D可视化分析:3d柱状图.3d直方图.3d线框图.3d曲面图.3d翼面图(莫比乌斯环) 目录

  2. 数据3D可视化简述!

    3D可视化趋势,3D可视化这个词语应该不陌生了.近几年,人们把一些繁琐的信息通过可视化的图表视觉化展现出来的例子,涌现的越来越多!在其它领域中3D可视化技术带来的震撼和冲击,带来全新的"用户 ...

  3. QtDataVisualization 数据3D可视化

    Data Visualization的三维显示功能主要由三种三维图形来实现,分别是三维柱状图Q3DBars,三维空间散点Q3DScatter,三维曲面Q3DSurface.这三个类的父类都是QAbst ...

  4. Python 抓取数据并可视化

    Python 抓取数据并数据可视化 前言 一.数据抓取篇 1.简单的构建反爬措施 2.解析数据 3.完整代码 二.数据可视化篇 1.数据可视化库选用 2.案例实战 (1).柱状图Bar (2).地图M ...

  5. WRF后处理/Python处理nc数据与可视化/极坐标网格绘制(Cartopy、netcdf4)——以北极雪水当量数据为例

    试了下用python处理并绘制北极雪水当量数据(来源:北极雪水当量格网数据集,,以往数据处理与图像绘制我习惯于使用matlab或R,绘制使用ArcGIS.不过python毕竟是万金油语言,试一试如何处 ...

  6. 可视化 | Python制作最炫3D可视化地图

    文章目录 1. 环境安装 1.1 安装 pyecharts 1.2 安装地图扩展包 2. 广东省3D地图 3. 北京市3D地图 4. 中国3D地图-行政区 5. 中国3D地图-数据可视化 大家好,我是 ...

  7. 【手把手教你】Python获取财经数据和可视化分析

    内容来自:微信公众号:python金融量化 关注可了解更多的金融与Python干货. "巧妇难为无米之炊",找不到数据,量化分析也就无从谈起.对于金融分析者来说,获取数据是量化分析 ...

  8. python动态演示数据gdp_Python可视化地图:2019年中国各省GDP情况(pyecharts地理图表)...

    大家好! 今天来分享一下如何用Python工具来帮助我们制作一张展示2019年中国各省GDP的可视化地图. 案例中数据表格结构如下: 代码及演示: import numpy as np import ...

  9. python tushare获取股票数据并可视化_荐Python获取股票数据及其可视化--基于tushare库...

    01 Tushare简介 Tushare是一个金融大数据开放社区,它免费提供各类金融数据和区块链数据 , 助力智能投资与创新型投资.在Tushare 旧版 运行了3年后,Tushare Pro终于要跟 ...

最新文章

  1. php函数在哪个文件夹下,php删除文件夹及其文件夹下所有文件的函数代码
  2. [Google Guava] 7-原生类型
  3. VTK:可视化之ChooseTextColor
  4. python except用法和作用_python上手--异常处理与文件
  5. iTunes“解决方案”发展历程及研究(上)
  6. 美团点评基于MGR的CMDB高可用架构搭建之路【转】
  7. C++常用概念——while循环时终止输入(Ctrl+Z,Ctrl+C,Ctrl+D(EOF))
  8. 力扣209-长度最小的子数组(Java,双指针解法)
  9. python什么学历能学_自考学历找工作,钱少点也没关系?
  10. 深入理解计算机系统第六章家庭作业之6.35 6.36
  11. 模型调参(AutoML)— optuna
  12. Python自动控制鼠标
  13. 写九宫格日记模块设计
  14. 无形胜有形——0day破解组织探秘
  15. 2018校招-挂面-H3C-技术支持工程师
  16. Godot着色器基础
  17. arduino智能浇花系统_智能自浇花系统
  18. mysql一次查询无关联多个表_面试官:为什么mysql不建议执行超过3表以上的多表关联查询?...
  19. 加粉推广全能助手 推广辅助工具 好多粉微信号加粉复制统计工具加强版,加粉推广神器,持续完善升级,新增统计点击转化,页面插件功能,完美支持ocpc接口
  20. 扎堆涌入“慢病管理”赛区,互联网医疗们看见了怎样的未来?

热门文章

  1. Android基础总结(精华完整版)
  2. 为什么要用 picture 标签代替 img 标签?
  3. docker eclipse打包_【Docker】Maven打包SpringBoot项目成Docker镜像并上传到Harbor仓库(Eclipse、STS、IDEA、Maven通用)...
  4. 解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。
  5. 浙江大学计算机博士很难复试专业课,浙江大学考博英语复试经验参考
  6. 重新回到Fcitx5的怀抱
  7. 程序员“996”,真的能带来高产出吗?
  8. 解决ssh packet_write_wait: Connection to 192.168.xx.xx port 22: Broken pipe的问题
  9. Marvolo Gaunt‘s Ring
  10. 电脑突然经常死机?(ubuntu系统如何检查原因)