Pyvista---(2)pyvista中的mesh定义

  • 为了简化数据表示的复杂度,在pyvista中,mesh可以表示面,也可以表示体素。
  • pyvista里面的所有数据都有节点(node),节点是网格的顶点,由XYZ坐标表示,即使是二维数据也是要有XYZ坐标。
  • 数据也可以是只包含顶点,比如点云(point cloud),点云是一群点。

0 mesh 三要素

  • 顶点(node)
  • 格子(cell)
  • 值(attributes):可以是顶点的值也可以是格子的值,如果设置顶点的值那么颜色就是渐变的,设置格子的值颜色就是不渐变的。

1 mesh中的顶点

下面以三个例子说明

1.1 点云

  • 可以用pyvista.PolyData来创建点云,也就是创建一个包含点的数据结构,可以是二维的也可以是三维的,然后这个数据是可以用来被可视化的。
  • 用numpy生成一堆点云的坐标,然后转为用vista可视化出来。
import numpy as np
import pyvista as pv

nodes = np.random.rand(100, 3)
mesh = pv.PolyData(nodes)
mesh.plot(point_size=10, screenshot='random_nodes.png')

结果:

在这里插入图片描述

1.2 网格(gridded mesh),三维数组

import pyvista as pv
from pyvista import examples
mesh = examples.load_hexbeam()

p = pv.Plotter() ## 建一个画板
# 然后在画板上画图
p.add_mesh(mesh, show_edges=True, color='white')
p.add_mesh(pv.PolyData(mesh.points), color='red', point_size=10, render_points_as_spheres=True)
## 相机位置
p.camera_position = [(6.20, 3.00, 7.50),
                 (0.16, 0.13, 2.65),
                 (-0.28, 0.94, -0.21)]
p.show(screenshot='beam_nodes.png')

结果:

在这里插入图片描述

1.3 三角表面,兔子

mesh = examples.download_bunny_coarse()

p = pv.Plotter()
p.add_mesh(mesh, show_edges=True, color='white')
p.add_mesh(pv.PolyData(mesh.points), color='red',
       point_size=10, render_points_as_spheres=True)
p.camera_position = [(0.02, 0.30, 0.73),
                 (0.02, 0.03, -0.022),
                 (-0.03, 0.94, -0.34)]
p.show(screenshot='bunny_nodes.png')

结果:

在这里插入图片描述

2 mesh中的 cell(单元),小格子

  • 如果了解医学图像处理的话,ct中的一个体素就是一个cell。
  • 当然,单元不仅限于体素,它们可以是三个节点之间的三角形,两个节点之间的线,甚至单个节点也可以是其自己的单元(但这是特例)。

如图所示:

在这里插入图片描述
在前面的代码上加上这句话即可画出上图:

p.add_mesh(mesh.extract_cells(mesh.n_cells-1),
           color='pink', edge_color='blue',
           line_width=5, show_edges=True)

3 mesh中的属性(attributes),颜色

  • 给每个顶点赋值,所以他的颜色是渐变的,如果给cell赋值,那么每个格子的颜色就是一样的。
  • 之前说的顶点是坐标点,那这个属性就是这个坐标点的值。简单来说顶点是矩阵的坐标,属性就是矩阵里面的值。那么值被可视化出来就是灰度了。毕竟在图像中矩阵的值就表示灰度值
  • 可以通过.point_arrays.cell_arrays方法来给mesh赋值。值可以是point的或是cell的,通过这个两个方法。这两个方法是一个字典。
  • point数据是指存在于网格的每个节点上的值的数组(标量,向量等)。该数组的顺序至关重要!属性数组中的每个元素必须对应于网格中的节点或单元。
import pyvista as pv
from pyvista import examples
mesh = examples.load_hexbeam()
camera_position = [(6.20, 3.00, 7.50),
                 (0.16, 0.13, 2.65),
                 (-0.28, 0.94, -0.21)]
# 这里是给每个顶点赋值,所以他的颜色是渐变的,如果给cell赋值,那么每个格子的颜色就是一样的。
mesh.point_arrays['my point values'] = np.arange(mesh.n_points)

mesh.plot(scalars='my point values', cpos=camera_position,
          show_edges=True, screenshot='beam_point_data.png')
  • 这里是给每个顶点赋值,所以他的颜色是渐变的,如果给cell赋值,那么每个格子的颜色就是一样的。

在这里插入图片描述

给格子(cell)赋值
mesh.cell_arrays['my cell values'] = np.arange(mesh.n_cells)
mesh.plot(scalars='my cell values', cpos=bcpos,
          show_edges=True, screenshot='beam_cell_data.png')

在这里插入图片描述

链接

  • https://docs.pyvista.org/getting-started/what-is-a-mesh.html
  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值