sindre.utils3d 三维工具包文档
本模块为三维数据处理与深度学习的全功能工具包,涵盖网格/点云处理、牙科专用算法、三维增强、可视化、以及三维深度学习网络。
目录
- sindre.utils3d 三维工具包文档
- 目录
- 模块概览
- mesh 网格处理
- dental_tools 牙科专用工具
- algorithm 三维算法库
- vedo_tools 三维可视化
- pointcloud_augment 点云增强
- networks 三维深度学习工具包(重点)
- FAQ
模块概览
子模块 | 主要功能描述 |
---|---|
mesh | 通用三维网格处理与格式互转 |
dental_tools | 牙齿/口腔mesh专用算法 |
algorithm | 三维几何/网格算法与优化 |
vedo_tools | 基于vedo的三维可视化与交互 |
pointcloud_augment | 点云增强与预处理工具 |
networks | 三维深度学习网络与损失函数(重点) |
mesh 网格处理
核心类:SindreMesh
- 通用三维网格对象,支持多格式互转(trimesh、vedo、open3d、pytorch3d等)
- 支持属性:顶点、面、法线、标签、颜色、曲率等
- 主要方法:
clone()
:快速克隆网格set_vertex_labels()
:设置顶点标签并自动着色update_geometry()
:几何结构更新compute_normals()
:法线计算apply_transform()
:应用变换矩阵show()
:三维可视化sample()
:网格采样点云to_trimesh()/to_open3d()/to_dict()/to_json()
:格式互转save()/load()
:文件读写
示例:
from sindre.utils3d.mesh import SindreMesh
import numpy as np
vertices = np.array([[0,0,0],[1,0,0],[0,1,0]])
faces = np.array([[0,1,2]])
mesh = SindreMesh([vertices,faces])
mesh.get_curvature()
mesh.show()
dental_tools 牙科专用工具
- FDI编号与索引转换、标签转颜色、牙冠变换、牙齿mesh切割等
- 主要函数:
convert_fdi2idx(labels)
:FDI编号转索引convert_labels2color(data)
:标签转颜色transform_crown(near_mesh, jaw_mesh)
:牙冠坐标系调整cut_mesh_point_loop_crow(mesh, pts)
:牙冠分割
示例:
from sindre.utils3d.dental_tools import convert_fdi2idx, convert_labels2color
labels = [11, 12, 13, 21, 22]
idx = convert_fdi2idx(labels)
colors = convert_labels2color(labels)
algorithm 三维算法库
- 三维标签与颜色映射、法线/曲率/边界/体素/采样/重建/分割/优化等
- 主要函数:
labels2colors(labels)
:标签转颜色compute_vertex_normals(vertices, faces)
:顶点法线compute_face_normals(vertices, faces)
:面法线farthest_point_sampling(vertices, n_sample)
:最远点采样remesh()
、fix_invalid_by_meshlab()
、A_Star
、GraphCutRefiner
等高级算法
示例:
from sindre.utils3d.algorithm import labels2colors, compute_vertex_normals
import numpy as np
vertices = np.random.rand(100,3)
faces = np.random.randint(0,100,(50,3))
colors = labels2colors(np.arange(100))
normals = compute_vertex_normals(vertices, faces)
vedo_tools 三维可视化
- 基于vedo的三维体数据切片与交互、矩阵可视化
- 主要类/函数:
matrix3d_by_vedo
:三维体数据切片窗口show_matrix_by_vedo(data)
:矩阵可视化
示例:
from sindre.utils3d.vedo_tools import matrix3d_by_vedo
import numpy as np
vol = np.random.rand(64,64,64)
viewer = matrix3d_by_vedo(vol)
viewer.show()
pointcloud_augment 点云增强
- 点云的随机旋转、缩放、平移、抖动、归一化、随机丢弃、裁剪、张量转换等
- 支持numpy和torch两套API
- 主要类:
Flip_np
、Scale_np
、RotateAxis_np
、RotateXYZ_np
、Jitter_np
、Translate_np
、RandomDropout_np
、Normalize_np
、ToTensor
、RandomCrop
示例:
from sindre.utils3d.pointcloud_augment import Flip_np, Scale_np
import numpy as np
points = np.random.rand(100,3)
flipper = Flip_np(axis_x=True, axis_y=False)
points_flipped = flipper(points)
scaler = Scale_np(lo=0.9, hi=1.1)
points_scaled = scaler(points)
# 示例
from torchvision import transforms
# torch风格增强流水线
transforms_torch = transforms.Compose([
ToTensor(device="cuda:0"),
Normalize(method="MaxMix", v_range=[0,1]),
RotateAxis(axis=[0,1,0]),
RotateXYZ(angle_sigma=0.05, angle_clip=0.15),
Scale(lo=0.8, hi=1.25),
Translate(translate_range=0.1),
Jitter(std=0.01, clip=0.05),
RandomDropout(max_dropout_ratio=0.2),
Flip(axis_x=False, axis_y=False, axis_z=True),
])
# numpy风格增强流水线
transforms_np = transforms.Compose([
Normalize_np(method="MaxMix", v_range=[0,1]),
RotateAxis_np(axis=[0,1,0]),
RotateXYZ_np(angle_sigma=0.05, angle_clip=0.15),
Scale_np(lo=0.8, hi=1.25),
Translate_np(translate_range=0.1),
Jitter_np(std=0.01, clip=0.05),
RandomDropout_np(max_dropout_ratio=0.2),
Flip_np(axis_x=False, axis_y=False, axis_z=True),
ToTensor(device="cuda:0"),
])
# 示例数据
points = np.random.randn(1024, 6)
points[:,3:6] = np.random.rand(1024,3)
# 批量增强
transformed_points = transforms_torch(points)
transformed_points_np = transforms_np(points)
networks 三维深度学习工具包(重点)
本子包专为三维点云/网格任务设计,包含多种主流深度学习网络结构、损失函数及相关工具。
主要内容
- 点云/网格神经网络:
pointnet2.py
:PointNet++dgcnn.py
:DGCNNpoint_transformerV3.py
:Point Transformer V3conv_occ.py
:体素卷积/占用网络Reconstruct3D.py
:三维重建网络image_text_net.py
:图像-文本多模态网络embed_attention.py
:嵌入式注意力机制- 体素/稀疏卷积:
point2voxel.py
、minkowski_utils.py
- 网络通用工具与损失:
network_utils.py
、losses.py
典型用法
from sindre.utils3d.networks.pointnet2 import PointNet2
import torch
model = PointNet2(num_classes=40)
points = torch.rand(8, 1024, 3)
logits = model(points)
from sindre.utils3d.networks.dgcnn import DGCNN
model = DGCNN(num_classes=40)
logits = model(points)
from sindre.utils3d.networks.losses import get_loss
loss = get_loss(logits, labels)
适用场景
- 三维点云分类/分割/重建/配准/多模态等任务
- 支持主流三维深度学习研究与工程落地
FAQ
- Q: networks子包适合哪些三维任务?
- A: 适合点云/网格的分类、分割、重建、配准、占用预测、多模态等主流三维深度学习任务。
- Q: 如何自定义自己的三维网络?
- A: 可参考
networks
子包内的网络结构,继承torch.nn.Module
,灵活组合已有模块。
如需详细API和参数说明,请查阅完整API文档。