目前大多使用点云配准法来进行植物模型的三维重建,这方面的研究已经在科研领域发展多年,很多学者对重建过程中的不同步骤提出了较为有效的方法[1-3]。最为经典的算法是1992年Paul J. Besl和Neil D. McKay提出的迭代最近点(iterative closest point,ICP)算法,这个算法至今在学术界仍具有很高的地位,在此之后提出的很多配准算法都是基于ICP算法的改进。该配准算法将2个不同视角得到的点云通过不断的迭代,配准在一个世界坐标系下,形成一个点云。除此之外,还有许多学者提出了很多不同的配准算法,比如Radu Bogdan Rusu等于2009年提出了采样一致性初始配准(sample consensus initial alignment,SAC-IA)算法,该算法引入快速点特征直方图(fast point feature histograms,FPFH)对点云的特征进行描述,获得了较好的初始配准效果[4]。
但是上述配准方法对配准参数的要求较高,且多幅连续配准时易产生累计误差。本文主要针对上述问题,提出一种新的、简易的应用于植物建模领域的三维模型重建方法,与传统点云配准法相比本文提出的算法具有较高的运算效率,具有较强的工程实用性。
1 三维彩色点云的获取要获得三维彩色点云,需要对深度图像和彩色图像中的像素点进行匹配,也就是在深度图上附加彩色图的像素信息,然后再分别获得深度相机和彩色相机的内参数矩阵,就可以获得三维彩色点云。通过推导,可以得到二维深度图像和二维彩色图像中对应像素点的坐标映射关系如式(1)。
$ {p_{{\rm{rgb}}}} = {\mathit{\boldsymbol{K}}_{{\rm{rgb}}}}^{ - 1}{\mathit{\boldsymbol{M}}_{{\rm{rgb}}}}{\mathit{\boldsymbol{M}}_{{\rm{ir}}}}^{ - 1}{\mathit{\boldsymbol{K}}_{{\rm{ir}}}}{p_{{\rm{ir}}}} $ | (1) |
通过深度图像中某点坐标pir,即可通过代入式(1)得到在彩色图像中的对应点坐标prgb,那么最后通过式(1)得到的三维点就有了对应的颜色值。对于深度相机的内参数矩阵Kir,深度相机的外参数矩阵Mir,彩色相机的内参数矩阵Krgb,彩色相机的外参数矩阵Mrgb这4个参量矩阵,可以通过相机标定法获得。但由于微软公司在推出Kinect体感设备的同时也发布了Kinect SDK,在里面提供有这4个参量矩阵,并且上述匹配过程在Kinect SDK中已经进行封装,因此可直接调用相关函数来实现。图 1为Kinect采集得到的深度和彩色图像。
Download:
|
|
通过深度图像与RGB图像的匹配获得的三维彩色点云如图 2所示。
Download:
|
|
Kinect V2的默认采集范围在z方向上是0.5~4.5 m,在x方向上是70°,在y方向上是60°,所以采集得到的的点云将会包含背景、地面等不需要的点云,而且会影响植物的建模,因此采用直通滤波对采集的点云进行处理,使其得到在一定范围限定内的点云。然后还要对点云进行统计滤波,该方法是空间中基于在输入数据中对点到临近点的距离分布计算的方法,能够完成对三维点云数据中离群点的去除,使点云文件中的点云质量得到有效提高[5-6]。图 3为直通滤波后的处理结果。
Download:
|
|
统计滤波器的实现是基于对每个点的邻域进行统计分析。首先设定一个距离阈值“distance”和点个数阈值“number”。然后统计点云中其余点与该待定点的距离,找出距离最近的前“number”个点,第“number”个点与待定点的距离如果大于阈值“distance”,那么则判定该待定点为离群点[7-9]。为了提高搜索速度,借助一种存储和表示三维数据的数据结构,既能够方便地存储三维数据,又能够进行高效率的搜索,因此本文采用“kd-tree”算法来实现。图 4为去除离群噪声点前后对比图。
Download:
|
|
通过对比图 4(a)和4(b)可以发现,离群噪声点已经得到了有效地去除,点云中只留下了有用的植物点云部分。但是此时发现也有部分有用的信息被误去除了,这是因为在当前拍摄角度下,该叶子中间部分所采集到的点云很少,所以被算法误判为离群点[10-11]。不过由于在后面要进行的重建工作前,要对目标物体进行多个方向的点云采集,在这次采集中没有很好地拍摄到的叶片部分,在其他角度的拍摄中可以拍摄得很完全,所以总的植物叶片信息还是很完整的,不影响重建效果。另外,实际的去噪效果和统计滤波的参数大小有关,在进行实际的重建工作之前,还应该根据实际情况适时调整参数,以获得最好的效果。
3 点云的拼接使用“点云拼接法”进行植物重建分为4个步骤:
1) 将一个转盘放在Kinect正前方的地面上,采集它连同地面的点云,然后计算转盘的高度。
2) 将一支笔立在转盘中心的转轴处,采集它的点云,计算最高点笔尖处的三维坐标(a, b, c)以获得转轴信息。
3) 将将要重建的植物盆栽放在这个转盘上,每采集一次点云,就顺时针旋转转盘60°,共采集6次点云。
4) 将第2次采集的点云沿着转轴逆时针旋转60°,将第3次采集的点云沿着转轴逆时针旋转120°,将第4次采集的点云沿着转轴逆时针旋转180°,将第5次采集的点云沿着转轴逆时针旋转240°,将第6次采集的点云沿着转轴逆时针旋转300°。此时得到的点云文件就是由6个角度采集的点云拼接而成的,从而完成了点云的拼接。接下来介绍第4)步中用到的点云绕轴旋转的原理:
在本应用中,由于转轴垂直于地面,所以转轴是平行于y轴的,因此点云中的点在绕转轴旋转时,这些点的y坐标不变。所以该问题可以简化为在二维平面上,一点绕另一点旋转一定角度的运动,示意图如图 5所示。
Download:
|
|
设待旋转点云中的某三维点为P(x, y, z),旋转轴笔尖处的三维点为Q(a, b, c),点P绕旋转轴逆时针旋转θ度,得到点P’。那么如上所述,y轴坐标将与点在xoz平面上的运动无关,因此为了方便推导,设图 5中的二维点v(x, z)为点P在xoz平面上的投影点,二维点v′(x′, z′)为点P’在xoz平面上的投影点,二维点w(a, c)为点Q在xoz平面上的投影点,从而将点P、点P’和点Q简化为图 5中的二维点。因此问题简化为:点v(x, z)绕点w(a, c)旋转θ度,得到点v′(x′, z′)。
首先将点v(x, z)和点w(a, c)同时移动,使点w(a, c)移到原点位置,则此时点v(x, z)位置为式(2):
$ \left\{ \begin{array}{l} x' = x - a\\ z' = z - c \end{array} \right. $ | (2) |
可以写成如式(3)的矩阵形式:
$ \left[ {\begin{array}{*{20}{c}} {x'}\\ {z'}\\ 1 \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} 1&0&{ - a}\\ 0&1&{ - c}\\ 0&0&1 \end{array}} \right]\left[ {\begin{array}{*{20}{c}} x\\ z\\ 1 \end{array}} \right] $ | (3) |
然后将v′(x′, z′)绕原点逆时针旋转θ度,得到新的v′(x′, z′),如图 5,有如式(4)关系:
$ \left\{ \begin{array}{l} x = r\cos \varphi \\ z = r\sin \varphi \\ x' = r\cos \left( {\theta + \varphi } \right)\\ z' = r\sin \left( {\theta + \varphi } \right) \end{array} \right. $ | (4) |
将式(4)的后两项展开,然后将前2项代入后2项中,得
$ \left\{ \begin{array}{l} x' = x\cos \theta - z\sin \theta \\ z' = x\sin \theta + z\cos \theta \end{array} \right. $ | (5) |
将式(5)写成矩阵形式,有
$ \left[ {\begin{array}{*{20}{c}} {x'}\\ {z'}\\ 1 \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {\cos \theta }&{ - \sin \theta }&0\\ {\sin \theta }&{\cos \theta }&0\\ 0&0&1 \end{array}} \right]\left[ {\begin{array}{*{20}{c}} x\\ z\\ 1 \end{array}} \right] $ | (6) |
最后将点v′(x′, z′)和点w同时移动,使点w回到原位置(a, c),则此时点v′(x′, z′)的位置为式(7)。
$ \left\{ \begin{array}{l} x' = x + a\\ z' = z + c \end{array} \right. $ | (7) |
写成矩阵形式为
$ \left[ {\begin{array}{*{20}{c}} {x'}\\ {z'}\\ 1 \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} 1&0&a\\ 0&1&c\\ 0&0&1 \end{array}} \right] * \left[ {\begin{array}{*{20}{c}} x\\ z\\ 1 \end{array}} \right] $ | (8) |
经过这3步,即可实现点v(x, z)绕点w(a, c)旋转θ度。将式(3)、(6)、(8)联立并化简得
$ \left[ {\begin{array}{*{20}{c}} {x'}\\ {z'}\\ 1 \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {\cos \theta }&{ - \sin \theta }&{a\left( {1 - \cos \theta } \right) + c\sin \theta }\\ {\sin \theta }&{\cos \theta }&{c\left( {1 - \cos \theta } \right) - a\sin \theta }\\ 0&0&1 \end{array}} \right]\left[ {\begin{array}{*{20}{c}} x\\ z\\ 1 \end{array}} \right] $ | (9) |
式(9)为点v(x, z)绕点w(a, c)旋转θ度得到点v′(x′, z′)的公式,那么由于点P(x, y, z)在绕轴旋转过程中的y坐标不变,因此当旋转轴笔尖处的三维点为Q(a, b, c)时,点P绕旋转轴逆时针旋转θ度得到点P’的公式为
$ \left[ {\begin{array}{*{20}{c}} {x'}\\ {y'}\\ {z'}\\ 1 \end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {\cos \theta }&0&{ - \sin \theta }&{a\left( {1 - \cos \theta } \right) + c\sin \theta }\\ 0&1&0&0\\ {\sin \theta }&0&{\cos \theta }&{c\left( {1 - \cos \theta } \right) - a\sin \theta }\\ 0&0&0&1 \end{array}} \right]\left[ {\begin{array}{*{20}{c}} x\\ y\\ z\\ 1 \end{array}} \right] $ |
至此可以在获取到旋转轴的坐标信息后,将点云绕轴旋转至任意角度值θ。算法的流程图如图 6所示。
Download:
|
|
为了与点云拼接法进行重建的实验结果进行对比,采用传统的SAC-IA算法和ICP算法来进行重建实验[12-14]。其中SAC-IA算法用来进行粗配准,它先对点云进行降采样,然后在待配准点云中提取点的特征FPFH,然后在目标点云中选取对应配对点,进而根据配对点计算两个点云的初始变换矩阵,完成粗配准。接下来再使用ICP算法对点云进行精确配准。
在使用SAC-IA和ICP算法对点云进行配准实验的过程中,选取以下参数设置为配准的参数,如表 1、2所示。
使用以上参数,在不同视角下对植物盆栽的不同方向均匀地采集了30次植物盆栽的点云,平均每个视角所相差的角度约为12°,配准结果如图 7所示。
Download:
|
|
观察图 7的配准结果可以发现,点云之间有比较明显的距离,植物的叶片不能够明显地区分开,配准效果不好。造成这个实验结果的原因可能是在这次配准过程中,配准的参数可能不是最优的,因此导致最终的配准结果不理想,并且此方法的计算耗时也较长,因此本文提出了点云拼接法以期望得到更好的重建速度和重建效果。
4.2 用点云拼接法进行三维重建根据上节分析的原理进行点云拼接的实验,将6个由不同视角采集的点云拼接到一起。首先将转盘放置于地面,采集它的点云信息以及计算高度值,以便后面去除地面以及转盘的点云,转盘如图 8所示。
Download:
|
|
第2步是获取转轴的位置信息,方法是在转盘中心的圆形孔洞中竖直地立一支笔,如图 9所示。
Download:
|
|
然后采集点云得到点云文件,统计该点云文件中y轴坐标最大的点即为笔尖处的点。于是得到式(11)中的a=0.039 869 3,c=0.81。获得此转轴信息后,接下来就可以将采集到的点云绕轴旋转任意角度值θ了。
第3步是进行点云的采集。将植物盆栽放在转盘上,一共需要采集6次点云,每次采集后需要转动转盘60°。如图 10所示。
Download:
|
|
第4步是进行点云拼接,分别绕轴转动相应的角度,将之前采集的6个不同视角的点云拼接到一起,完成了植物三维模型的建立。结果如图 11所示。
Download:
|
|
观察重建的结果,发现该算法将不同视角采集到的点云准确地拼接在了一起,实现了将植物盆栽重建出完整模型的功能。现将使用点云拼接法得到的实验结果与用给定参数实施点云配准法得到的结果进行对比,如表 3所示。重建结果如图 12。
Download:
|
|
观察结果可以发现,用点云拼接的方法进行植物重建过程仅用时4.376 s,速度很快并且重建效果较好。在本文所做点云配准实验所用的配准参数下,配准结果不是很理想,使用点云拼接法获得的重建结果更好。
5 结束语本文针对植物叶片的三维重建研究主要完成了以下工作:1)利用Kinect获取彩色点云;2)点云的滤波;3)点云的拼接等方面的工作。这些工作对于三维重建技术在植物建模方面的工作具有一定的推广意义。但是点云拼接法也有自身的缺点:1)只能对可移动的盆栽植物进行重建,因为重建的过程需要在转盘上进行,所以这是它的限制条件之一;2)这种方法重建的精确度取决于手动的操作精度,比如花盆的轴心与圆盘的轴心的重合程度是否足够高,以及每次转动的角度是否精确等。所以除了重建的精确度取决于手动的操作精度之外,还有就是应用场合比用配准的方式实现重建范围窄,目前只能用于小型可移动的物体,因此增加点云拼接法的适用范围也是下一步研究的重点。
[1] | 杨海清, 王洋洋. 基于多Kinect的三维人脸重建研究[J]. 浙江工业大学学报, 2018, 46(2): 137-142. DOI:10.3969/j.issn.1006-4303.2018.02.004 (0) |
[2] | 高寒, 李芳, 朱景福, 等. 农作物基于点云的三维重建方法研究[J]. 农业科技与信息, 2018(2): 74-76, 86. (0) |
[3] | 陈金广, 郭秋梦, 马丽丽, 等. 用于多视点云拼接的改进ICP算法[J]. 计算机系统应用, 2018, 27(1): 180-184. (0) |
[4] | 吴磊.基于Kinect的室内场景三维重建[D].北京: 北京理工大学, 2015. http://cdmd.cnki.com.cn/Article/CDMD-10701-1017297790.htm (0) |
[5] | 苏本跃, 马金宇, 彭玉升, 等. 基于K-means聚类的RGBD点云去噪和精简算法[J]. 系统仿真学报, 2016, 28(10): 2329-2334, 2341. (0) |
[6] | 罗方燕. PCL库点云统计去噪算法的应用研究[J]. 现代计算机, 2016(26): 63-66. DOI:10.3969/j.issn.1007-1423.2016.26.015 (0) |
[7] | 张伟洁, 刘刚, 郭彩玲, 等. 基于三维点云的苹果树叶片三维重建研究[J]. 农业机械学报, 2017, 48(Supp 1): 103-109. (0) |
[8] | 朱光兴, 杨莎莎, 张浩, 等. 基于PCL的三维点云去噪方法研究[J]. 世界有色金属, 2017(17): 31-32. (0) |
[9] | 陈学伟, 朱耀麟, 武桐, 等. 基于SAC-IA和改进ICP算法的点云配准技术[J]. 西安工程大学学报, 2017, 31(3): 395-401. (0) |
[10] | 郑立华, 麦春艳, 廖崴, 等. 基于Kinect相机的苹果树三维点云配准[J]. 农业机械学报, 2016, 47(5): 9-14. (0) |
[11] | 罗俊豪, 李慧敏, 张力文, 等. 基于Kinect的物体三维重建研究[J]. 山东工业技术, 2016(21): 237. (0) |
[12] | 李诗锐, 李琪, 李海洋, 等. 基于Kinect v2的实时精确三维重建系统[J]. 软件学报, 2016, 27(10): 2519-2529. (0) |
[13] | 李务军, 吴斌. 基于Kinect深度图像的三维重建[J]. 微型机与应用, 2016, 35(5): 55-57. DOI:10.3969/j.issn.1674-7720.2016.05.017 (0) |
[14] | 郭连朋, 陈向宁, 徐万朋, 等. 基于kinect传感器的物体三维重建[J]. 四川兵工学报, 2014, 35(11): 119-123. DOI:10.11809/scbgxb2014.11.033 (0) |