M a y a v i Mayavi Mayavi


基于VTK开发


官方文档


安装说明

Mayavi虽然是一个轻量级的库,但是的依赖的库却很多,主要需要提前安装:

  1. VTK
  2. 一个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_数组


Mayavi库的基本元素

1.Mayavi.mlab

Mayavi_数据_02

2.Mayavi API

Mayavi_3d_03


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_科学计算_04
Mayavi_标量_05

Mayavi管线的层级

  • Engine:建立和销毁
  • ScenesScenes:多个数据集合Sources
  • Filters:对数据进行变换
  • Module Manager:控制颜色,Colors and Legends
  • Modules:最终数据的表示,如线条、平面等。
mlab.show_pipeline()

Mayavi_标量_06

程序配置属性的步骤

1.获得场景对象,mlab.gef() 。
2.通过children属性,在管线中找到需要修改的对象。
3.配置窗口有多个选项卡,属性需要一级一级获得。

mlab对Numpy建立可视化过程

1.建立数据源
2.使用Filter(可选)
3.添加可视化模块


3D绘图函数-0D和1D数据

Mayavi_科学计算_07

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()

Mayavi_科学计算_08

Mayavi_数据_09

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()

Mayavi_标量_10

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

Mayavi_科学计算_11

一 使用数据过滤器对数据可视化

标量、矢量数据可视化
等值面、等值线、轮廓线切面、箭头、数据流


流体数据的标量可视化、矢量可视化实例


三维扫描数据(模型/地形)可视化实例


三维地球场景可视化实例


曲线UI交互控制可视化实例


六 可视化概念的提出

将抽象的事务、过程 转变为:图形、图像,被成为可视化

1987年2月,美国国家科学基金会(NSF),提出科学计算可视化的概念

科学计算可视化,即将数值计算、工程测量、卫星等科学数据进行图形可视化

科学计算可视化的分类:

  1. 信息可视化:信息、知识等
  2. 科学可视化:空间数据等

七科学计算可视化的主要方法

7.1.二维标量数据场

  1. 颜色映射法
    将颜色与数据之间建立映射关系

Mayavi_科学计算_12

  1. 等值线方法

Mayavi_3d_13

  1. 立体图法和层次分割法
    Mayavi_3d_14

7.2.三维标量数据场

  1. 面绘制法
  2. 体绘制法

7.3.矢量数据场

  1. 矢量数据场直接法

Mayavi_3d_15

  1. 矢量数据场流线法
    Mayavi_3d_16

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()

Mayavi_数据_17

图像的三维重建

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()  



十一


十二


十三


十四


十五


十六


十七


十八


十九


二十


二十一


二十二


二十三


二十四


二十五


二十六


二十七


二十八


二十九


三十


三十一


三十二


三十三


三十四


三十五


三十六