M a y a v i Mayavi Mayavi
基于VTK开发
官方文档
安装说明
Mayavi虽然是一个轻量级的库,但是的依赖的库却很多,主要需要提前安装:
- VTK
- 一个GUI库,可以是其中一个:PyQt4,,PySide,,PyQt5, wxPython.
pip install vtk-i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --user
pip install mayavi -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --user
pip install pyqt5 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com --user
测试
# Create the data.
from numpy import pi, sin, cos, mgrid
dphi, dtheta = pi/250.0, pi/250.0
[phi,theta] = mgrid[0:pi+dphi*1.5:dphi,0:2*pi+dtheta*1.5:dtheta]
m0 = 4; m1 = 3; m2 = 2; m3 = 3; m4 = 6; m5 = 2; m6 = 6; m7 = 4;
r = sin(m0*phi)**m1 + cos(m2*phi)**m3 + sin(m4*theta)**m5 + cos(m6*theta)**m7
x = r*sin(phi)*cos(theta)
y = r*cos(phi)
z = r*sin(phi)*sin(theta)
# View it.
from mayavi import mlab
s = mlab.mesh(x, y, z)
mlab.show()
Mayavi库的基本元素
1.Mayavi.mlab
2.Mayavi API
from mayavi import mlab
x = [[-1,1,1,-1,-1],[-1,1,1,-1,-1]]
y = [[-1,-1,-1,-1,-1],[1,1,1,1,1]]
z = [[1,1,-1,-1,1],[1,1,-1,-1,1]]
s = mlab.mesh(x,y,z)
mlab.axes(xlabel='x', ylabel='y', zlabel='z')
mlab.outline(s)
mlab.show()
Mayavi管线的层级
- Engine:建立和销毁
- ScenesScenes:多个数据集合Sources
- Filters:对数据进行变换
- Module Manager:控制颜色,Colors and Legends
- Modules:最终数据的表示,如线条、平面等。
mlab.show_pipeline()
程序配置属性的步骤
1.获得场景对象,mlab.gef() 。
2.通过children属性,在管线中找到需要修改的对象。
3.配置窗口有多个选项卡,属性需要一级一级获得。
mlab对Numpy建立可视化过程
1.建立数据源
2.使用Filter(可选)
3.添加可视化模块
3D绘图函数-0D和1D数据
3D绘图函数-Points3d()
函数形式:
- points3d(x, y, z.….)
- points3d(x, y, z, s, …)
- points3d(x,y, z, f, …)
xyy,z表示numpy数组、列表或者其他形式的点三维坐标
s表示在该坐标点处的标量值
f表示通过函数f(x, y,z)返回的标量值
3D绘图函数-Points3d()
import numpy as np
from mayavi import mlab
# 建立数据
t = np.linspace(0,4*np.pi,20)
x = np.sin(2*t)
y = np.cos(t)
z = np.cos(2*t)
s = 2 + np.sin(t)
# 对数据进行可视化
points = mlab.points3d(x,y,z,s,colormap="Reds",scale_factor=0.25)
mlab.show()
3D绘图函数-plot3d()
函数形式;
- plot3d(x, y, z…)
- plot3d(x, y, z,s, …)
x,y,z表示numpy数组,或列表。给出了线上连续的点的位置。s表示在该坐标点处的标量值
plot3d函数参数
color、colormap、extent、figure.
line_width、name、opacity、representation、
reset zoom、transparent、tube_radius、
tube_sides、vmax、vmin
一 使用数据过滤器对数据可视化
标量、矢量数据可视化
等值面、等值线、轮廓线切面、箭头、数据流
二 流体数据的标量可视化、矢量可视化实例
三 三维扫描数据(模型/地形)可视化实例
四 三维地球场景可视化实例
五 曲线UI交互控制可视化实例
六 可视化概念的提出
将抽象的事务、过程 转变为:图形、图像,被成为可视化
1987年2月,美国国家科学基金会(NSF),提出科学计算可视化的概念
科学计算可视化,即将数值计算、工程测量、卫星等科学数据进行图形可视化
科学计算可视化的分类:
- 信息可视化:信息、知识等
- 科学可视化:空间数据等
七科学计算可视化的主要方法
7.1.二维标量数据场
- 颜色映射法
将颜色与数据之间建立映射关系
- 等值线方法
- 立体图法和层次分割法
7.2.三维标量数据场
- 面绘制法
- 体绘制法
7.3.矢量数据场
- 矢量数据场直接法
- 矢量数据场流线法
八 TVTK
九
Mayavi 入门
初级教程
mayavi三维绘图的实现详解
医疗图像三维重建
一些案例
import numpy as np
from mayavi import mlab
x, y = np.ogrid[-2:2:20j, -2:2:20j]
z = x * np.exp( - x**2 - y**2)
pl = mlab.surf(x, y, z, warp_scale="auto")
mlab.axes(xlabel='x', ylabel='y', zlabel='z')
mlab.outline(pl)
mlab.show()
图像的三维重建
1.导入函数
import SimpleITK as sitk
from mayavi import mlab
from tvtk.util.ctf import ColorTransferFunction,PiecewiseFunction
2.导入数据
'导入mha数据'
path = 'H:\\CT34328912002\\mha\\A.mha' #path为文件的路径
image = sitk.ReadImage(path) #利用sampleItk读入mha数据,读入办法不唯一
image = sitk.GetArrayFromImage(image) #获得图像的数组形式的数据,需要注意顺序
3.进行渲染
'进行体数据的绘制,渲染'
#mlab.contour3d(image) #显示表面
vol = mlab.pipeline.volume(mlab.pipeline.scalar_field(image), name='3-d ultrasound ')
'ctf.add_rgb_point()第一个数值为阈值,之后的分别为RGB三个色彩的RGB值'
ctf = ColorTransferFunction() # 该函数决定体绘制的颜色、灰度等
ctf.add_rgb_point(-50, 0, 0, 1)
ctf.add_rgb_point(100, 0.5, 0, 0.5)
ctf.add_rgb_point(50, 0, 0.5, 0)
ctf.add_rgb_point(150, 0, 0, 0.5)
ctf.add_rgb_point(250, 0.8, 0, 0)
vol._volume_property.set_color(ctf) #进行更改,体绘制的colormap及color
vol._ctf = ctf
vol.update_ctf = True
'改变整体图像的不透明度'
otf = PiecewiseFunction()
otf.add_point(20,0.5)
vol._otf = otf
vol._volume_property.set_scalar_opacity(otf)
ctf.range = [0, 1]
mlab.show()
十
十一
十二
十三
十四
十五
十六
十七
十八
十九
二十
二十一
二十二
二十三
二十四
二十五
二十六
二十七
二十八
二十九
三十
三十一
三十二
三十三
三十四
三十五
三十六