基于OpenCL的多标靶加速定位方法

2024-08-06 00:00:00王瑾瑜罗剑波
软件工程 2024年8期

关键词:标靶定位;OpenCL;迭代最近点;GPU

中图分类号:TP391 文献标志码:A

0 引言(Introduction)

平面标靶即人工标志物,在三维重建点云拼接[1]及大型建筑监测中发挥了重要的作用[2-3]。将平面标靶安置于基坑、堤坝、隧道等表面,并利用相机监控平面标靶的位置,可有效实现预警预测功能。

国内外学者使用的标靶定位方法有许多,高超等[4]使用最小二乘法将圆形标靶轮廓拟合成椭圆形,并通过相关几何变换进行定位,该方法在2 m拍摄距离下能达到0.1 mm的测量精度。何华等[5]针对激光扫描仪圆形平面标靶,首先,拟合标靶的最佳平面,其次,利用凸包算法提取标靶边缘点,最后,使用抗差最小二乘法求解标靶的中心坐标,中心定位精度达到0.4 mm。OLASZEK[6]通过图像梯度检测“十”字形标靶的边缘,计算边缘坐标的算术平均值,并将其作为目标位置,校正后的平均误差为0.4 pixel。RIBEIRO等[7]通过亮度阈值检测正方形标靶的边缘并计算交点的坐标,精度约为0.7 pixel。

针对现有的标靶定位方法精度不高、效率较慢及同时定位数量少的问题,本文提出一种基于OpenCL的多标靶加速定位方法,使用边缘检测方法获得当前图像中标靶的二维边缘点集;使用已知现实标靶参数建立模板点集;使用二维ICP迭代寻找模板边缘点集与当前边缘点集的最近点;使用OpenCL框架并行计算,修改迭代停止条件,以减少迭代次数并加快收敛速度,实现多标靶实时定位。

1 标靶中心定位(Target center positioning algorithm)

本文使用的标靶参数如图1所示,标靶定位方法流程如图2所示,包括图像预处理、边缘检测、边缘点云预处理等。

1.1 图像预处理及标靶边缘检测

工业相机采集到的标靶如图3(a)所示。在实际图像采集中,环境条件的变化常引入椒盐噪声、高斯噪声等干扰。为了减少这些噪声对边缘检测的不利影响,本文方法先使用中值滤波进行去噪,再使用Canny算子进行边缘检测,检测结果如图3(b)所示。

1.2ICP点云配准

迭代最近点(Iterative Closest Point,ICP)算法[8]是目前使用广泛的点云配准算法之一,在三维重建、无人驾驶等领域得到广泛运用。传统的二维ICP算法大致如下:首先对输入的目标点云构建二叉树数据结构,进行两幅点云之间的最近点寻找,对于待配准点云的每一个点,寻找出在目标点云中的最邻近点,也就是欧氏距离最短的点;其次根据寻找出的邻近点对求解最优变换,求得旋转矩阵R 与平移矩阵T;最后将刚体变换矩阵作用于待配准点云,计算新的待配准点云与目标点云之间的误差,若误差满足最终迭代停止条件,则输出矩阵与变换后的待配准点云,否则继续迭代,ICP算法流程如图4所示。

ICP的本质是最小化两幅点云之间的误差,该误差通常是每个点对之间的欧氏距离,也可以是别的误差度量。ICP求解最优刚性变换的基本步骤如下。

1.3 基于ICP的标靶中心定位

在获得当前图像中的标靶边缘后,为了定位标靶中心,需要根据现有的边缘信息找到标靶的圆心。由于标靶是二维平面且理想情况下标靶与CCD(Charge-Coupled Device)相机靶面平行,所以使用预制的模板点云与当前获得的标靶边缘点云进行二维迭代最近点,得到的刚性变换矩阵,即可定位当前的标靶坐标。

1.3.1 点云预处理

在本文中,目标点云是通过工业相机拍摄标靶,然后使用亚像素边缘检测得到二维边缘点云T,点云数量为n,点云坐标单位为像素。待配准点云为通过已知的标靶图案几何参数预制的模板点云S ,模板点云的外圆直径为d,内圆半径为r,点云数量为m,其中心点为原点,预制的二维模板点云图如图5所示。

2 基于OpenCL的ICP加速算法实现(Acceleratedimplementation of ICP based on OpenCL)

仅用CPU运算ICP算法定位标靶,随着标靶数量的增多,计算时间随之增加,从而无法满足实时性处理的需求。图形处理单元GPU、开放运算语言OpenCL、计算机视觉与计算机图形学的发展,为处理大数据量的问题提供了通用、高性能的并行计算环境。与CUDA(Compute Unified Device Architecture)只能运行在英伟达图形处理器(NVIDIA GPU )上相比,OpenCL可以运行在包括NVIDIA(英伟达)、AMD(Advanced MicroDevices)、ARM(Arm Limited)的众多硬件厂商生产的计算设备上,具有较高的可移植性。此外,OpenCL定义了丰富的API(Application Programming Interface),使开发者能高效利用异构计算资源,从而有效解决实时定位问题。通常,ICP之中搜寻最邻近点对的算法有KD-tree(K-Dimension Tree)、VP-tree(Vantage Point Tree)等,KD-tree是其中应用较为广泛的数据结构。但是,传统的KD-tree存在无效节点搜索过多导致的查询效率不稳定问题[9-10],所以本文采用VP-tree搜寻最邻近点算法代替传统的KD-tree搜寻算法。

VP-Tree是一种用于支持度量空间中高效最近邻搜索的数据结构,是一棵基于连续距离函数的二叉平衡树[11]。VP-tree不仅对低维度、点数目较少的点集有很好的搜索性能,而且不依赖数据的分布形式,查询性能比KD-tree更稳定,其基本思想是选择一个优势点,然后基于与该点的距离,将数据点集合分成两部分,即距离参照点较近的点和距离参照点较远的点。每个子集都可以用相同的方法递归地构建子树,从而形成一个二叉树。

2.3 GPU下的ICP算法

上文构造的VP-tree虽然能大大加快数据搜索的速度,但是通常情况下,点集中点的数量成千上万,在CPU中搜寻速度非常缓慢。为了提高ICP的迭代搜寻速度,将两组点集的去质心化、VP-tree的最邻近搜索算法、点集矩阵变换、点集之间的欧氏距离计算等,都传入GPU中并行计算,根据点集的大小,动态设置全局尺寸,以最快的速度完成点集变换及计算。

在传统ICP算法中,初始矩阵起着关键作用,初始矩阵决定了迭代次数及配准精度[12]。一般情况下,初始矩阵通常设置为单位矩阵,在两个点集距离较远或者相似度不高的情况下,会严重影响配准速度及精度。因此,本文算法在传统ICP算法的基础上进行改进,由于在位移监控应用场景下的标靶位置大多数为线性变化或静止状态,将每次配准的刚性变换矩阵应用到下次配准的初始矩阵,对待配准点集进行粗配准,可以有效减少迭代次数。

此外,传统的迭代停止条件为两个点集的误差小于某个阈值就停止迭代。由于检测的标靶边缘点集与人工预制的模板点集并非完美重合,该阈值在不同应用场景下并非通用,若阈值太大,配准精度将降低,若阈值太小,即使达到了最优配准位置,其误差仍然高于这个很小的阈值,导致迭代无法停止。因此,将传统的迭代停止条件改为此次迭代误差与上次迭代误差的差值小于某个阈值,改进后的算法将大幅降低迭代次数,减少计算时间,提高系统的实时性。

本文采用的GPU加速ICP算法流程如图7所示,具体步骤如下。

(1)在CPU中建立关于目标点集Q(当前检测点云)的VPtree,其中包含子节点和叶节点。

(2)将模板点集P、目标点集Q以及VP-tree的叶节点、子节点传输到GPU缓冲区中。

(3)使用OpenCL的API进行各种初始化操作,例如查询平台、创建上下文、创建命令队列、创建内存对象等。

(4)根据数据集大小划分点集数据,使其并行执行最邻近点搜索算法(ICP)。

(5)ICP在GPU中的去质心化、VP-Tree的最邻近搜索算法、点集矩阵变换、点集之间的欧氏距离计算皆由内核程序完成计算,减少GPU与CPU的传输耗时。

(6)完成迭代计算后,将最后的刚体变换矩阵与配准误差输出至CPU。

3 实验分析(Experimental analysis)

为了验证本文采用的多标靶定位方法,比较改进前后的标靶ICP定位算法效率,以及CPU和GPU环境下的标靶定位算法效率,本文通过设计不同的实验验证算法效率及本文算法的精度。实验的系统环境为Ubuntu 22.04,硬件环境为四核64位CPU,采用4*Cortex-A76核心,主频为2.4 GHz,GPU 为Mali-G610 MP4。相机为“海康”MV-CE200-10UC,2 000万像素CMOS工业相机。实验分别对1~20幅标靶进行算法效率测试,为了有效比较CPU和GPU环境下的标靶定位算法效率差异,在CPU使用多线程进行多幅标靶的并行计算。实验的模板点集点数量为1 890个,检测到的单个标靶边缘点集点数量平均为1 800个,设置最大迭代次数为200次,此次迭代误差与上次迭代误差的差值阈值设置为1×10-6,误差阈值设置为1×10-5。相机采集20个标靶图像(图8),测量距离约为1.4 m,单个标靶像素的半径大约为4aAbHUB4onFzfxLB0cB+BFuMcBGmikhjiKJ0xiYskCs0=7 pixel,物理半径为30 mm,像素当量约为0.63 mm/pixel。为了验证本文算法的定位精度,采用千分位移台对其中一个标靶进行X 方向的阶梯型位移测试,位移台的最小刻度为0.01 mm,精度为0.01 mm。

图9为单个标靶定位的迭代耗时,在CPU和GPU中迭代70次分别需要耗时4 700 ms和360 ms,在GPU中迭代定位单个标靶时,使用OpenCL框架在GPU中的计算时间相较于CPU,大约减少了92%。优化后的ICP算法通过继承先前时刻的刚性变换矩阵,减少了迭代计算时间,实现了连续的快速定位。图10为不同标靶数量定位单次耗时,即4种算法进行单次标靶定位的计算时间,在GPU环境下,本文的改进算法有着明显优势。由表1可以看出,本文算法针对标靶数量小于3个且进行连续配准定位时,CPU 和GPU 的耗时相差无几,这是因为在CPU环境中采用了多线程,同时CPU需要将数据传输至GPU,这个过程相对耗时。随着标靶数量增加,传统ICP定位算法中CPU耗时显著增长,且与GPU的耗时差距逐渐扩大,凸显出在处理大量标靶时,GPU的性能优势更为显著。使用改进后的ICP定位算法,耗时大幅降低,几乎可以达到实时定位。

为了验证算法的精度,对其中固定在位移台上的标靶进行位移跟踪检测,将第一帧定位得到的位置设为初始值,后续的定位位置都减去初始值。使用千分位移台对此标靶进行X 方向的阶梯型位移,在91 s、199 s、318 s处施加X 正方向的0.1 mm位移,在407 s、513 s、602 s处施加X 负方向的0.1 mm位移,测量结果如图11所示。经计算,平均绝对误差约为0.026 1 mm,定位精度约为0.05 mm,即0.081 9 pixel。

综上所述,改进的ICP算法在GPU上相较于CPU在处理多个标靶时具有显著的时间效率优势,尤其是在标靶数量较多时。在GPU中连续定位20个标靶仅需要1.2 s左右一次,算法的首次定位耗时仅为CPU中的19%,后续连续定位时间也展现出显著的时间优势,并且定位精度可以满足系统定位要求。

4 结论(Conclusion)

本文提出一种基于OpenCL的多标靶加速定位方法,使用ICP寻找最优配准位置,定位最佳标靶中心。相较于通过几何形状进行标靶定位的传统算法,本文算法更精确且具有鲁棒性。本文在定位方法的实现上进行了改进,采用VP-tree的数据结构,使用OpenCL框架并行计算,并且使下一时刻的边缘点云继承上一时刻的刚性变换矩阵,改进了迭代停止条件。与传统ICP实现算法相比,减少了迭代次数并加快了收敛速度,在一定程度上提高了算法效率及精度,满足了一般应用场景的实时性需求。但是,本文算法中没有考虑到噪声边缘点的干扰,没有进行错误对应点去除,因此接下来需要对噪声边缘点处理进行改进,继续完善ICP算法中的点云预处理,提升配准的鲁棒性。

作者简介:

王瑾瑜(1999-),男,硕士生。研究领域:机器视觉。

罗剑波(1975-),男,博士,讲师。研究领域:光电精密检测,激光直写。