Python:基于matplotlib与mayavi的3D可视化

3D可视化是一种用于呈现三维数据的方法,它可以帮助我们更好地理解和分析复杂的空间结构和关系。在科学、工程、医学和其他领域,3D可视化常用于展示和研究体数据、空间模型、分子结构等。

以下是一些常见的用于3D可视化的工具和库:

  1. Matplotlib:Matplotlib 是一个常用的Python数据可视化库,其中的 mplot3d 模块提供了3D可视化功能,可以绘制三维图形和表面图。
  2. Mayavi:Mayavi 是一个基于VTK(Visualization Toolkit)的强大的3D科学数据可视化工具,它提供了丰富的功能和交互性,支持绘制体数据、曲面、等值面、轮廓线等。
  3. Plotly:Plotly 是一个交互式的数据可视化库,支持绘制各种类型的3D图形,包括散点图、线图、曲面图等,并提供了丰富的交互功能和布局选项。
  4. VTK(Visualization Toolkit):VTK 是一个强大的开源可视化库,提供了广泛的3D可视化算法和工具,可以用于构建复杂的可视化应用。
  5. ParaView:ParaView 是基于VTK的可视化软件,主要用于科学数据的可视化和分析,支持高效处理大规模数据,并提供了各种可视化技术和交互性。

(1)基于matplotlib的3D可视化

200x200x200图像可视化:耗时问题比较严重,且任意视角的拖动都等需要等待较长时间。
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import tifffile				# pip install tifffile

# 加载 TIFF 图像
image_data = tifffile.imread('marked_image.tif')

# 创建立体图像的坐标网格
x, y, z = np.meshgrid(np.arange(image_data.shape[1]+1), np.arange(image_data.shape[0]+1), np.arange(image_data.shape[2]+1))

# 创建 3D 图形对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制立体图像
ax.voxels(x, y, z, image_data, cmap='gray')

# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# 显示图像
plt.show()

(2)基于mayavi的3D可视化

(2.1)立方体

在这里插入图片描述

import numpy as np
import tifffile				# pip install tifffile
from mayavi import mlab		# pip install mayavi

# 加载tif图像
image_data = tifffile.imread('marked_image.tif')

# 创建三维体素网格
x, y, z = np.indices(image_data.shape)
x = x.ravel()
y = y.ravel()
z = z.ravel()
values = image_data.ravel()

# 绘制体素数据
mlab.figure(bgcolor=(1, 1, 1))
mlab.points3d(x, y, z, values, mode='cube', scale_factor=1, colormap='binary')
mlab.show()

(2.2)体素体

黑红色为255,其余颜色为0 ~ 255的值。
在这里插入图片描述

import numpy as np
import tifffile				# pip install tifffile
from mayavi import mlab		# pip install mayavi

# (1)加载tif图像
image_data = tifffile.imread('marked_image.tif')

# (2)创建Mayavi场景
mlab.figure(bgcolor=(1, 1, 1))

# (3)创建三维体素数据
volume = mlab.pipeline.volume(mlab.pipeline.scalar_field(image_data))

# (4)创建颜色映射,全黑体素置黑色,全白体素置白色
color_map = np.zeros((256, 4))
color_map[0] = (0, 0, 0, 0)  # 全黑体素的颜色为黑色
# color_map[255] = (1, 1, 1, 1)  # 全白体素的颜色为白色

# (5)设置体素数据的颜色映射
volume.module_manager.scalar_lut_manager.lut.table = color_map

# (6)添加坐标轴
mlab.outline(color=(0, 0, 0), line_width=3.0)  # 设置:边线的颜色、边线宽度

# (7)设置Mayavi场景的渲染参数(可以改变 Mayavi 场景的视角和观察者与场景的距离,从而获得所需的视觉效果。)
mlab.view(azimuth=0, elevation=90, distance='auto')
########################################################################################################################
# mlab.view() 函数用于设置 Mayavi 场景的视角。在这里,azimuth 参数表示方位角(水平旋转),elevation 参数表示俯仰角(垂直旋转),distance 参数表示观察者与场景的距离。
#       azimuth: 水平旋转角度,以度数表示。0 表示正对前方,正值表示向右旋转,负值表示向左旋转。
#       elevation: 垂直旋转角度,以度数表示。90 表示从正上方俯视,0 表示水平视角,-90 表示从正下方仰视。
#       distance: 观察者与场景的距离。'auto' 表示自动调整距离以适应场景。
########################################################################################################################

# (8)显示Mayavi场景
mlab.show()

猜你喜欢

转载自blog.csdn.net/shinuone/article/details/131724915