Skip to content

SLMaster是一个较为完整的开源结构光3D相机软件(Structured-Light)。你能够使用它完成从标定、条纹编码、三维重建、点云后处理一系列操作。欢迎Star⭐和Fork。

License

Notifications You must be signed in to change notification settings

Buling-Knight/SLMaster

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. SLMaster

SLMaster是一个较为完整的结构光3D相机软件。您可以使用它对任意被测物体完成静态扫描或者实时动态扫描。

该软件将由博主的系列文章从0到1搭建一套属于你自己的高精度实时结构光3D相机手把手教学完成,可关注公众号进行学习。

请不要吝惜你的⭐,你的⭐和关注是博主源源不断的动力。有任何问题和bug反馈请提Issue

想先体验该软件?

请在Release页面下载exe安装文件,但请注意exe安装方式不支持GPU加速。

2. 依赖

SLMaster依赖的库包含如下几点:

如果电脑没有NVIDIA GPU,软件仍然能够使用CPU加速有效运行,此时可无需opencv_contribute依赖。

3. 编译

当你获取到本库代码之后,首先检查上述依赖,若不满足依赖条件,可通过点击上述依赖库跳转至对应的库,随后下载其代码并进行编译。以上面库皆没有编译安装的环境为例,它的编译顺序应该是这样的:

  1. 下载OpenCVopencv_contribute并进行编译(若WITH_CUDA未勾选请勾选上)
  2. 下载Qt5.15并选择MSVC编译套件安装
  3. 下载VTK并令VTK_GROUP_ENABLE_Qt=YES进行编译
  4. 下载PCL-1.12.1-AllInOne进行安装,安装完成后删除PCL安装文件夹下的除3rdParty外的其它任何文件,并将3rdParty文件夹中的VTK文件夹删除
  5. 下载PCL并选择好第三方库路径进行编译
  6. 打开命令行窗口,键入git clone --recursive https://github.com/Practice3DVision/SLMaster.git克隆SLMaster
  7. 打开VSCode编译运行SLMaster即可

注意! 每当编译好一个库都应当在系统环境变量中加入。例如,编译完成OpenCV后,设置好系统环境变量OpenCV_DIR路径。

你可以打开SLMaster中的BUILD_TEST选项,这将编译google_test中的测试用例,这些测试用例同样是一份非常不错的示例代码。

当你成功进行编译后,将得到可执行文件SLMasterGui.exe,它位于build/gui/目录之下。随后运行它尽情享受吧!

4. 使用

离线使用情况下,可通过进入扫描模式->离线扫描模式->选择左相机文件夹->选择右相机文件夹->开始扫描->单次扫描测试离线重建效果,软件提供一组离线数据集位于安装目录/data/下。

如您需要更改算法参数以测试自己的离线数据集,请通过更改安装目录/gui/qml/res/config下的相机配置文件,该文件记录了3D相机所有的状态,包括硬件组成、算法参数等。

如您需要接入硬件并执行在线功能,请修改安装目录/gui/qml/res/config下的相机配置文件,确保硬件组成参数与您所用的硬件设备一致。

5. 功能

SLMaster具备完整的软件功能,关键功能可以总结为以下几点:

  • 单目/双目/三目结构光相机切换功能

  • 3D相机在线/离线实时检测功能

  • 3D相机连接/断开连接功能

  • 光强、曝光时间调整功能

  • 投影仪编码图案在线调试功能

    包括单次投影、连续投影、暂停投影、步进投影、停止投影等。

  • 在线条纹编码功能

    包括1/8位深度图案,图案类型包括相移互补格雷码方案、多频外插方案(待完成)、多视立体几何方案,离焦方法包括传统二值离焦、二维误差扩散方法、最佳脉冲宽度调制方法。

  • 在线条纹烧录功能

  • 十字线校准功能

  • 实时图像查看功能

  • 离线相机标定功能

    包括单目/双目标定,受支持的标定板类型包括棋盘格、圆点、同心双圆环。此外,具备图像查看、显示误差分布图、显示极线校正图等功能。

  • 在线投影仪标定功能

    可通过前述在线编码功能选择自己需要的相移互补格雷码周期数目,随后进入该功能执行在线投影仪标定,标定投影仪的内参和与相机的外参,支持单次内外参同时标定或先标内参再标外参。受支持的标定板类型包括棋盘格、圆点、同心双圆环。此外,具备显示误差分布图、水平绝对相位、垂直绝对相位、相机图像、投影仪映射图像查看等功能。

  • 扫描模式切换功能(静态扫描/动态扫描/离线扫描)

  • 实时三维点云渲染输出功能

  • 实时纹理渲染功能

  • 单次重建/实时重建功能

  • 深度颜色归一化功能

  • 点云裁剪功能

  • 点查询功能

  • 点云保存功能

  • 帧率/点云数据量显示功能

  • 点云后处理功能

    该模块通过QuickQanava实现的节点编辑器而实现。通过将各类PCL算子封装成节点,实现了以节点编辑器为基础,拖曳并连接节点而形成特定的点云处理算法。该种方式避免了在针对各类点云场景下,频繁的代码修改而耗时耗力的问题,可在线修改参数或是编辑算法流程以查看后处理效果。

  • 英/汉语言切换

5. 示例

功能 运行示例
十字线校准等功能 十字线校准功能
条纹生成功能 条纹生成功能
离线相机标定功能 离线相机标定功能
标定误差分布图显示功能 标定误差分布图显示功能
在线投影仪标定功能 在线投影仪标定功能
在线扫描功能 在线扫描功能
实时扫描功能 实时扫描功能
后处理功能 后处理功能

6. TODO

  • 深度图/纹理图保存功能
  • 编码条纹裁剪功能

About

SLMaster是一个较为完整的开源结构光3D相机软件(Structured-Light)。你能够使用它完成从标定、条纹编码、三维重建、点云后处理一系列操作。欢迎Star⭐和Fork。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 42.2%
  • C 28.5%
  • QML 22.8%
  • CMake 4.0%
  • Cuda 0.6%
  • Objective-C++ 0.6%
  • Other 1.3%