APP下载

基于QT 的3D 相机软件系统设计

2021-03-25王连庆

软件导刊 2021年3期
关键词:载物台噪点体素

王连庆,钱 莉

(上海工程技术大学机械与汽车工程学院,上海 201620)

0 引言

3D 视觉[1]的表达形式更为直观,相比传统的2D 视觉,可获得物体更加全面的信息。获得的信息以三维形式储存,同时具有颜色、强度等特征,因此在文物重建、人脸识别、3D 打印、手势识别[2-3]等方面都有着广泛应用。

文献[4]开发了一套树木结构提取与分割系统,其利用地面激光雷达快速获取树木点云数据,从中提取与分割树木结构(胸径、树高、材积等),并根据分割的数据判断树木生长情况;文献[5]基于三维激光扫描技术,针对军事领域中的覆土油罐建设,设计了一套辅助建设系统,具有油罐选址、预算控制等功能。但文献[4]、[5]基于具体应用场景设计的点云处理系统应用场景单一,不易于扩展。文献[6]利用OpenGL 开发的点云处理系统对拾取得到的型值点进行NURBS 曲线拟合,实验证明处理10 万个点仅需0.8s,因此可快速处理点云数据;文献[7]设计了一种针对3D 扫描仪的点云处理系统,该系统点云重建功能强大,可恢复真实物体的纹理信息。文献[6]、[7]中的系统在某一模块功能强大,但是整体功能较少,无法对复杂情况下的点云数据进行处理。文献[8]利用PCL 点云库开发的点云处理系统集成了点云分割、滤波、重建等算法,系统功能较全,但软件界面的交互性较差,当点云数据量较大时,点云处理速度较慢、效率较低。此外市场上多家3D 相机厂家都拥有自己的点云处理系统,如LMI、康耐视等,但相关系统往往需要与自己品牌的3D 相机配套使用,这种捆绑销售的策略剥夺了用户自主选择的权利。

通过以上分析可以发现,目前针对激光雷达、3D 扫描仪开发的点云系统较多,而针对3D 相机开发的系统很少。针对具体项目集成的点云处理系统较多,但大多功能单一、扩展性较差,无法处理复杂状态的点云数据。因此,针对该问题,本文利用QT 平台与点云库(Point Cloud Li⁃brary,PCL)开发了一套独立的点云处理系统,可对获得的点云数据进行去噪、优化、分割、重建等操作。此外,本软件已集成康耐视、LMI、盛相、photoneo 等品牌的3D 相机进行实时图像采集,并对采集的数据自动进行处理。

1 系统结构与功能设计

软件系统运行的效率、速度和稳定性由处理点云的算法决定。PCL 点云库具有开源、函数接口丰富等特点,适合作为此款软件的底层算法,而QT 提供了强大的界面开发功能,并且还具有与点云可视化库(Visualization Tool Kit,VTK)相结合的函数接口和插件,可以实现共同开发,适合作为此款软件的界面开发工具。

1.1 系统底层工具介绍

QT 是一款跨平台的界面设计软件,在市面上的主流操作系统中都可以运行,目前通过QT 还衍生了Qt Designer/Creator 等优秀产品。QT 为使用者提供了已完成的封装库,通过信号槽机制连接按键及需要调用的函数,使得代码与界面完美结合,可以让使用者进行快速、高效的开发。

PCL 是一款用于处理三维点云数据的开源库,起初是在一个机器人软件平台(Robot Operating System,ROS)环境下开发的,2011 年独立成为一个完整的开源库,如今已成为高校、研究所科研时必不可少的工具。它可以对3D相机、激光雷达等传感器中的数据直接进行处理,常用方法有滤波[9]、分割、配准[10]、特征提取、曲面重建[11]、识别、追踪等。

VS(Microsoft Visual Studio)是由微软研发的一款程序编译软件,可支持C、C++、C#、Java 等主流语言,此外其还拥有程序生命周期中所需的绝大部分工具,如UML 工具、代码管控工具、IDE 等,编写的代码在微软所有平台下均可运行。对于开发团队而言,可实现同事间的相互协作,提高专注度与效率,让整个开发过程变得更加简单。

1.2 系统功能设计

结合3D 相机的特性,对软件功能进行整体设计。软件功能主要包括点云数据格式转换、点云分割、点云滤波、网格化重建、点云变换、点云选取。具体系统功能如图1所示。

Fig.1 Function of point cloud system图1 点云系统功能

该软件可以直接从3D 相机中获取实时数据(本软件已集成康耐视、LMI、盛相、Photoneo 等品牌3D 相机的取像SDK),或直接导入电脑中的三维点云数据,利用QT 中的可视化控件VTK Widget 对点云进行显示。导入后可通过键盘操作实现上下左右前后6 种视图切换,还可通过拖按鼠标左键对点云进行缩放,拖按鼠标右键对点云进行旋转,拖动鼠标中键对点云进行平移。此外,可通过界面左侧的菜单设置点云旋转的轴和角度,以及平移的方向和距离。复位按键提供给用户在丢失点云的情况下使用。在实际使用时,由于采集数据会存在大量噪点,因此需要先运用滤波算法对点云进行精简,之后对点云进行分割、重建、匹配等操作,可大大提升算法的准确性。

2 软件关键功能介绍

2.1 点云滤波

该款软件实现了3 种滤波算法,包括直通滤波、体素栅格滤波和统计滤波算法[12]。各种滤波算法各有优缺点,需在处理点云数据之前选择最优的滤波算法使点云更加均匀,噪声更小。

直通滤波可以去除指定方向上指定值域内的点云数据,其原理是遍历所有点云,并判断其是否在输入的值域内,如果在,则保留该点云,相反则将其删除。直通滤波器运行速度快、原理简单,对于去除图像背景有着很好的效果。

体素栅格滤波的原理是对采集的点云实现降采样,在有效减少点云数量的同时,不改变点云原有几何结构。一般用于稠密点云的预处理,以加快后续粗配准、精匹配、重建等算法速度。该滤波器的主要思想是建立一个体素立方体,将体素立方体内所有点云的重心近似看作体素里的点云,将所有重心点当作滤波完成后的点云,通过设置体素参数决定点云数量。该滤波器相比直通滤波器运算速度较慢、效率较低。

统计滤波的主要作用是去除由观测噪声产生的离群噪点,这些离群噪点在点云空间中稀疏分布。在估算点云曲率变化率[13]或法向量时,该类噪点会导致估算错误,使得后期操作产生较大误差。该滤波器的思想是假设点云中所有点与其最近k 个邻近点的平均距离满足高斯分布,可根据方差和均值得出一个距离阈值,当某个点与其最近k 个点的平均距离大于该阈值时,认定该点为噪点并删除。

2.2 点云分割

点云分割的常见算法有平面分割、欧式聚类分割[14]、区域生长分割[15]与区域蔓延分割算法等。本软件系统提供了3 种点云分割算法的接口,分别是区域生长分割算法、欧式聚类分割算法,以及在平面分割基础上开发的立方体分割算法。其中,区域生长分割算法是通过比较点与点之间的法线,将符合平滑约束的点云合并在一起,最终以点集形式输出,每个点集被当作同一平面。立方体分割算法是基于VTK 显示模块实现的,通过鼠标控制立方体的6 个面进行拉伸、旋转等操作,框选出需要的点云实现分割。如在利用3D 视觉技术引导机器人抓取过程中,该分割算法可分割出需要抓取物体的点云,引导机械手进行抓取。

2.3 三维重建

三维重建的主要方法有贪婪投影三角重建、泊松重建[16]与最小二乘移动重建,本软件提供了上述3 种方法的接口,可根据不同情况加以使用。

贪婪投影法使用了生长法中的曲面建模算法,将空间中的点及其邻域内的点投影到切平面上,从而得到三维空间内点与点之间的连接关系。该算法首先通过kd-tree[17]建立空间内点云与点云之间的索引关系,利用此关系可快速查找出目标点四周点集的索引,之后随机定义一个初始三角形,通过计算生长边中点的邻域获得该生长边的投影面,并确定阈值K,将生长边最邻近的K 个点投影到该平面上。在平面上选择投影点与生长边所构成夹角余弦值最小的点作为最优扩展点,并将该点加入到三角网格中组成新的三角形。不断重复上述步骤,直至形成网格曲面。

在曲面重建中会产生漏洞,表面较为粗糙,此时则需要采用最小二乘移动法,先对点云进行重采样,设置多项式阶数,然后用高阶多项式插值法使重建表面更加平滑、完整。

2.4 其他功能

手动选取单个点云功能是通过PCL 提供的选点回调函数,同时对鼠标事件进行响应,对于选中点通过vector 容器传回函数中实现标记,并利用可视化工具VTK 界面进行显示。

特征点是点云数据集中与其它点云特征差异较大的点,只有寻找到具有最有效特征的点才能方便后续的跟踪配准,提高软件处理速度。本软件可提取点云的NARF(Normal Aligned Radial Feature)关键点、SIFT3D(Scale-in⁃variant feature transform)关键点[18]与Harris3D 关键点。NARF 关键点是为了从深度图像中识别物体而提出的,SIFT3D、Harris3D 关键点是基于经典匹配算法SIFT、Harris扩展而来的。

3 实验验证与结果分析

本文利用康耐视EA-5000 相机对零件进行数据采集,软件运行环境为:Window10 Visual Studio 2017 C++,CPU为Inteli5-4800,RAM 为4GB。

3D 相机点云处理软件系统界面由菜单栏、功能区和显示区组成,最上侧是菜单栏,左侧是功能选择区,右侧是显示窗口。其中,左侧功能选择区有滤波工具、重建工具、分割工具、选点工具、格式转换工具等,界面内容如图2 所示。

3.1 机械零件表面重建实验

将零件放在载物台上,3D 相机固定在载物台上方50cm 处,对机械零件进行取像,得到的三维点云如图2 所示。由于机械零件放在载物台上,所以获取的点云会受到载物台底面干扰,同时也会受到采样噪声的影响。首先使用直通滤波去除零件背景,去除效果如图3 所示,接着利用体素栅格滤波对点云进行精简,最后利用贪婪投影三角网格算法对机械零件进行重建,重建效果如图4 所示。通过图片可以看出,重建效果与原零件结构基本符合,可以较好地还原出零件结构。但在细节处理方面较差,需要进一步对算法进行优化。

Fig.2 3D camera capturing point cloud图2 3D 相机获取点云

Fig.3 Point cloud of mechanical parts after filiter图3 机械零件滤波后的点云

3.2 传动轴提取

将几个轴零件无序地放在载物台上,3D 相机固定在载物台上方50cm 处,对轴进行取像。需要获取其中一个轴的点云,用来实现机械臂对轴的抓取,获得的点云如图5所示。可以看到由于采样误差,获取的点云有许多噪点,因此用统计滤波设置阈值,将大于阈值的点作为噪点去除。接着使用立方体分割算法,截取所需轴的点云数据,截取的点云如图6 中的红色部分所示,最后将截取的点云保存成pcd 格式导出。由图7 可以看出,提取出的点云可以达到要求。

3.3 产品高度测量与点云配准

使用3D 相机采集凸台数据,对采集的数据进行去噪处理后,拟合出凸台上表面平面与桌面所在平面,可测量出凸台高度如图8 所示。此外,系统还可以进行点云配准,绿色点云是模板,灰色点云是采集到的点云,可看出经过点云配准后,两块点云完全重合,如图9 所示。

Fig.4 Reconstruction drawing of mechanical parts图4 机械零件重建效果

Fig.5 3D camera capturing point cloud图5 3D 相机获取点云

Fig.6 Divided axis图6 立方体分割出的轴

Fig.7 final effect图7 最终效果

Fig.8 Visual display of measuring product height图8 测量产品高度可视化显示

Fig.9 Visual display of point cloud registration图9 点云配准可视化显示

4 结语

本文采用可视化界面开发工具QT 设计了一套点云数据处理系统。由于PCL 点云库在点云处理方面的高效性,配合QT 的界面设计,可同时兼顾软件的可靠性与界面的美观性。相比其它软件,本软件可实现与相机独立使用,同时兼容大多数品牌的3D 相机。在点云数据量达到百万数量级时,运行速度可得到保证。在功能方面,系统提供的点云滤波、点云分割、点云重建等功能操作简单,便于使用。该软件实用性较强,但在大规模点云数据处理过程中运行速度较慢、效率较低,而且在重建模块中,物体重建的细节特征不够准确,需要在未来研究中进一步完善。

猜你喜欢

载物台噪点体素
基于多级细分的彩色模型表面体素化算法
瘦体素决定肥瘦
相机学院
运用边界状态约束的表面体素加密细分算法
分光计的调节原理和方法
基于体素格尺度不变特征变换的快速点云配准方法
低相噪点频源的设计与验证
技术橱窗
用Lightroom降低画面的噪点表现
分光计的全程有目的调节