3D处理库
项目描述
欢迎来到 MeshLib!
3D 扫描正变得越来越普遍。机器人自动化、自动驾驶汽车以及众多其他工业、医疗和科学应用需要先进的计算机视觉来提供客户如今所期望的自动化水平。人工智能的巨大崛起再次推动了计算机视觉和利用 3D 数据使机器更智能的需求。不仅手头的任务变得更加复杂,而且数据的大小也呈指数级增长。
有许多处理 3D 数据的通用库。有些源于流行的 CAD 软件包,有些是开源的。商业的往往相当昂贵,而开源是免费的,尽管提供的功能往往受到限制。此外,这些库重视通用性高于其他功能,以允许最大数量的应用程序,但随着 3D 数据量的增长,性能变得至关重要,因为它从未如此重要。其中一些问题可以通过使用商业云、上一代 CPU 或 GPU 的规模来解决,但数据表示的底层复杂性使其非常困难和费力。
我们在设计 MeshLib 时设定的目标是重视简单性和性能,同时提供广泛的有用计算算法。该库还支持当今传感器可以生成的最重要的数据结构——点云、网格、体积等。例如,网格由半边数据结构表示,不能做成非流形的。某些应用程序可能需要非流形,但大多数实际扫描可以表示为流形网格而没有问题。
一些有用的链接
-
MeshInspector是一个基于 MeshLib 的免费应用程序
-
MeshInspector在线网络浏览器版本
-
MeshLib 和 MeshInspector幻灯片
-
网格操作与 VTK 库的比较幻灯片
-
MeshInspector YouTube 频道
-
MeshLib文档
-
匿名联系我们
主要特点
此列表不完整且每天更新
数学基础
- 数学原语和操作支持(向量 2D、3D、4D;线;平面;边界框;矩阵;仿射变换;四元数;直方图等)
3D 数据处理、创建、修改
- 3D 数据各种表示支持:Mesh、Voxel 和 Point Cloud。
- 数据创建
- 通过给定的顶点和三角形创建网格,
- 表面基元(例如 tor、立方体、球体等)。
- 表现形式转换
- 点云到网格的三角剖分,
- 网格到浊点的转换,
- 网格到体素的转换,
- 体素到网格的转换。
- 变形
- 拉普拉斯变形,
- 自由变形,
- 放松,网格平滑,
- Position Verts Smoothly,顶点按照梯度沿邻居排列。
- 偏移量
- 网格偏移,
- 网格部分偏移。
- 解析度
- 将网格分解成更小的三角形(提高分辨率)
- 相对于旧网格具有指定误差的网格抽取(减少三角形数量,降低分辨率)。
- 在表面上切割轮廓。修改网格以使生成的轮廓包含在指定点处穿过三角形的新边。
- 分裂
- 将网格拆分为子网格(组件)
3D数据操作
- 布尔运算(联合、交集、差异)
- 通过体素对网格进行布尔运算。高效但不如显式网格操作准确。
- 显式网格布尔运算,非常精确、快速和准确。
3D 数据问题修复
- 固定网孔
- 孔缝合(通过缝合边界来去除两个孔)
- 填孔,
- 孔修复指标
- 基本的三角测量指标集,
- 扩展的三角测量指标集,
- 自定义三角测量指标。
- Delaunay三角剖分优化,根据Delaunay准则,改变三角形而不改变顶点,
- 隧道修复,
- 多重边缘检测
- 退化三角形固定,
- 底切固定,通过体素,
- 表面自相交固定
- 通过体素保证修复,
- 通过放松(网格平滑)修复。
3D 数据的函数
- 投影
- 将点投影到网格上
- 路口
- 光线与网格的交点,
- 平面与网格的交点,结果是轮廓,
- 找到表示两个网格相交的轮廓,网格保持不变,
- 距离
- 点到网格的距离,
- 两个网格之间的最小距离,
- 网格距离图(高度图),
- 二维等高线距离图。
- 分割
- 半自动体素分割(体积分类)。
- 按曲率进行半自动网格分割。
- 采样
- 网格采样。结果是一组单独的细化顶点,网格保持不变。
- 点云采样。结果是一组单独的细化点,云保持不变
- 均匀的云采样,
- 网格云采样。
- 小路
- 找到通过网格顶点的最短路径,
- 在表面上找到测地线最短路径,不一定通过网格顶点。
- 迭代最近点 (ICP),两个网格对齐
- 点对点,
- 指向平面。
即将推出的功能
我们计划在 MeshLib(MeshInspector 中已经存在)中添加计算机断层扫描重建。如果您想查看其他功能,请写信给我们。
建造
在 Windows 上使用 VS2019 构建
git clone https://github.com/MeshInspector/MeshLib.git
cd MeshLib
git submodule update --init --recursive
cd ..
准备第三方
一些第三方来自 vcpkg,而其他(在 vcpkg 中缺失)被配置为 git 子模块。
Vcpkg
-
请安装 vcpkg,并将其集成到 Visual Studio 中(注意 vcpkg 在 Visual Studio 中需要英文语言包,并且 vcpkg 不能安装在 FAT 卷上,只能安装在 NTFS 上):
git clone https://github.com/Microsoft/vcpkg.git cd vcpkg git checkout 5c54cc06554e450829d72013c4b9e4baae41529a .\bootstrap-vcpkg.bat .\vcpkg integrate install (with admin rights) cd ..
更多细节在这里:vcpkg。
-
将MeshLib/thirdparty/vcpkg/triplets/x64-windows-meshrus.cmake 复制到vcpkg 安装的vcpkg/triplets文件夹中。
-
执行安装.bat
cd vcpkg # or add vcpkg to PATH ../MeshLib/thirdparty/install.bat cd ..
-
在 Visual Studio 2019 中打开解决方案文件 MeshInspector/source/MeshLib.sln。构建并运行。
在 Linux 上使用 CMake 构建
在 Ubuntu 20.04.4 上检查了此安装。
使用自动安装过程。如果尚未安装所需的软件包,则大约需要 40 分钟。这种方法对于新的 MR 开发人员 安装/构建依赖项很有用。构建项目。运行测试应用程序在终端中运行以下命令:
git clone https://github.com/MeshInspector/MeshLib.git
cd MeshLib
sudo ./scripts/build_thirdparty.sh # need sudo to check and install dependencies
./scripts/install_thirdparty.sh
./scripts/build_sources.sh
./scripts/distribution.sh
sudo apt install ./distr/meshrus-dev.deb
注意:
./scripts/install*.sh也可以使用脚本,但更可取的是 apt install。
注意:
./scripts/install*.sh脚本将 MR 文件直接复制到/usr/local/lib. 如果在 apt install deb 包之前存在,则手动删除此目录。
注意:您可以将构建类型指定为 Debug by
export MESHRUS_BUILD_TYPE=Debug。发布是默认的。
一体化
视窗
将 MeshLib 集成到您的项目中有两个通用选项:
两个选项的共同点: 安装第三方
子模块
您可以将 MeshLib 作为存储库中的子模块,并将所有 MeshLib 的项目包含到您的解决方案中。
注意:您应该
MeshLib/source/common.props在解决方案的其他项目中使用。
注意:
CustomMRProps.props您可以通过在上面的目录中定义来自定义道具common.props
分配
您可以下载发行版并将其集成到您的项目中。
项目设置:
C/C++ -> General -> Additional Include Directories添加distribution\install\include;Linker -> General -> Additional Library Directories添加distribution\install\app\$(Configuration);Linker -> Input -> Additional Dependencies添加distribution\install\lib\$(Configuration)\*.lib;- 调试:
C/C++ -> Preprocessor -> Preprocessor Defenitions添加_ITERATOR_DEBUG_LEVEL=0; vcpkg -> Triplet放x64-windows-meshrus
确保将所有 dll 复制distribution\install\app\$(Configuration);到您的$(TargetDir)
注意: MeshLib 发行版只有 x64 版本
注意:分发是在调试中使用 ITERATOR_DEBUG_LEVEL=0 构建的,因此您需要为您的项目设置它
Linux Ubuntu/Fedora
您可以下载开发包并使用您的 Linux 操作系统包管理器安装它
项目详情
meshlib -0.0.23.0-cp38-none-manylinux_2_31_x86_64.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 5a4f6eb2e14279fdb7b85200fc03b5ddce82cdf954ca4c7f6264c40c1f256f10 |
|
| MD5 | 6d17472254ecb584f380814f7afe228a |
|
| 布莱克2-256 | 912eb88cf74ef7eeaf4100f959649dc02b8970b1d8f355cadbdbc8c4f0ac5d33 |