一种基于KinectV2的果实三维点云实时获取方法与流程

文档序号:19933269发布日期:2020-02-14 22:16阅读:894来源:国知局
一种基于KinectV2的果实三维点云实时获取方法与流程

本发明属于计算机图形学、计算机视觉相关技术在果实三维数字表型获取中的应用。涉及一种基于kinectv2设备的果实三维点云实时获取方法。



背景技术:

随着农业技术的发展,植物表型组学正在向着智能化、可视化、数字化的方向发展。果实三维建模是植物数字化研究中的重要组成部分,对果实表面进行逆向建模,一方面可以通过模拟环境变化对植物模型的影响探索植物的生长发育规律,指导农业生产;另一方面,要加快突破农业关键核心技术。植物模型的真实构建有利于进一步推进数字果实、农业电子商务的发展,有力的支持了智慧农业、精准基因表达监控、智慧育种等技术,对加快数字农业进程,提高农产品的价位和品质有着重要的技术价值。

目前基于三维扫描仪的点云获取虽然方便高效,但是三维扫描仪动辄数万元、数十万元的价格并不利于技术普及。市面上基于tof的三维扫描设备如kinectv2等,虽然可以方便的、廉价的获取点云数据,但是由于kinect获取的点比较稀疏、噪声较多、相机位置不确定,在后期配准的时候存在着无法完全对应的问题。



技术实现要素:

针对上述现有技术中存在的问题与缺陷,本发明的目的在于提供一种基于kinectv2设备的果实三维点云实时获取方法,该方法要解决的技术问题是用户通过手持kinectv2设备采集果实点云,通过kinectv2设备获取的彩色图和深度图提取准确的点云信息,并在扫描过程中要实时跟踪扫描进度。

实用上述发明目的所采用的技术方案是:一种基于手持kinectv2的果实三维点云实时获取方法,包括如下步骤:

步骤1:kinectv2的驱动与配置利用libfreenect2驱动kinectv2,用户在使用前需执行zadig更换kinectv2的驱动为libusbk(v3.0.7.0);

步骤2:整个扫描进程的建图情况和相机实时位置由同步定位与建图技术进行实时展示。

步骤3:每隔1秒从kinectv2采集一张rgb图像并且对应采集一张深度图像。相邻2张素材的角度变化幅度应不大于10度为最佳取材。

步骤4:使用kinectv2获得的彩色和深度图像逐像素进行匹配获得点云。

步骤5:利用openmvg的特征提取和特征匹配模块,对导入的多幅二维图像进行特征提取和匹配,生成果实作物稀疏点云模型,根据特征匹配结果,基于sfm算法利用射影定理计算得到相机位置等场景信息进行稀疏重建(sparsereconstruction)。

步骤6:生成果实作物的密集点云模型,通过pmvs算法,运用多视角立体重建(multi-viewstereoreconstruction)方法,利用所得到的场景信息与原始照片,不断进行面片生成与筛选,从而扩散已有数据点进行稠密重建(densereconstruction);通过l0范数约束下的曲率均值漂移,解决保持果实刺状尖锐特征的原物混合噪点的去除问题。

步骤7:拼接果实作物的点云模型,通过c++的eigen、opencv和pcl库实现相机内外参数矩阵的储存与运算。根据相机内外参对三维点云模型进行旋转与平移并加成到一个点云模型上,完成点云的拼接。

步骤8:利用icp算法进行点云的精细融合。获得稠密无孔洞的点云。

步骤9:为了去除果实点云的背景噪点,我们利用直通滤波等基于滤波器的方法,然后利用维诺联合协方差进行果实点云的保征精去噪,最后通过基于曲率的自适应均值偏移获得完整、无噪声的果实点云。

基于此,本发明以kinectv2获取的深度和rgb图像为基础,结合sfm算法发明出一套适合于植物果实、低成本、实时、高效的果实点云获取系统。其中sfm算法用于从kinect获得的rgb图像中提取三维点信息用以补充kinectv2深度信息获得点的稀疏问题,也用于辅助确定相机位置,确定kinectv2获取点云片的配准信息。

本发明使用kinectv2为主要设备,大大降低了点云获取的成本,通过前后端分离,使得计算可离线化操作,节省了人力成本,加快了前端的显示速度。

本发明对果实点云三维扫描系统研发、果实三维表型数据库建立等具有重要的技术理论价值和应用意义。

本发明通过廉价的rgb-d设备kinectv2获得作物果实点云,同时保证了果实点云的准确的还原,为果实的数字化研究、果实点云的逆向工程提供了更加广泛的研究基础。

附图说明

图1为本发明所述的一种基于sfm和机器学习的三维点云实时获取系统基本流程;

图2为本发明中获取稀疏点云的运动恢复结构(sfm)基本流程;

图3为运动恢复结构中3d点被投影到摄像机的2d图像平面的过程示意图;

图4为kinectv2初始化程序运行过程图;

图5为系统从kinectv2中获取图像、提取关键点、旋转位姿矩阵估计的过程;

图6为系统计算的关键点可视化;

图7为本系统未去噪的直接拍摄的点云;

图8为本系统去噪后的未旋转的点云;

图9为通过本系统估计出的旋转矩阵旋转后的结果图;

图10为通过本系统icp产生的旋转矩阵旋转后的结果图。

具体实施方式

以下结合附图解释本发明的原理、特征和过程,所举实例只用于解释本发明,并非用于限定本发明的范围。

本发明中,用户在按本发明的方式配置好kinect相关的驱动后,可以手持kinectv2进行缓慢的移动,在此过程中,本发明程序自动采集rgb图和深度图,用于三维点信息的计算。

如图1所示,一种基于kinectv2的果实三维点云实时获取方法,包括如下的步骤:

步骤1:用户通过在运行前执行zadig更换选择xboxnuisensor(compositeparent)。更换为libusbk(v3.0.7.0)。

步骤2:对相机进行标定,完成特征提取,特征匹配等过程,进而求解相机位姿。

步骤2.1:相机标定,相机采集的图像因镜头原因会产生畸变,因此需要对摄像头进行畸变矫正。首先对一张棋盘格图片进行多角度,多方向拍摄,采集20张图片,再利用matlabcameracalibrator完成相机内参的标定。

步骤2.2:特征提取,本发明的同步定位与建图,只用于扫描进程的展示,对精度无要求,因此采用具有旋转不变性和尺度不变性的orb特征,使用fast-12算法提取orientedfast关键点。同时为了更高效,本发明添加一组预测试操作,即对于每个像素,直接检测邻域圆上的第1、5、9、13像素,当这四个像素中有连续三个像素超出阈值范围时,再继续检测其它像素。通过前几步的操作找出来的特征点可能出现“扎堆”现象,使用非极大值抑制(non-maximalsuppression),判断中心像素的亮度是否是其邻域圆内的最大值,避免特征点集中的问题。

步骤2.3:特征匹配,对步骤2.2中提取的每个关键点利用brief算法计算其描述子。

步骤2.3.1.在大小为m×m的特征点邻域内随机选取n个点对(p,q),p,q均符合的高斯分布,采样准则服从各向同性的同一高斯分布。

步骤2.3.2.比较p,q大小关系,若p比q大,则取1,反之取0,最终得到n维由0、1组成的向量,即steerbrief描述子。

步骤2.3.3.本发明过程中得到的特征点数量并不多,因此使用暴力匹配法(brute-forcematcher),对图像it中每一个特征点测量与图像it+1中提取到的所有特征点的描述子的汉明距离(hammingdistance)。

步骤2.3.4:找出所有匹配之间的最小距离,筛选出汉明距离小于二倍最小距离的匹配,获得两组匹配好的3d点p、p'。

步骤2.3.5:定义第i对点的误差项:ei=pi-(rpi′+t)

步骤2.3.6:构建最小二乘问题,求使误差平方和达到极小的r,t:

步骤2.3.7:经过分解公式,最终使用svd方法求解最优的r,由公式pi=rpi′+t求解t,得到相机位姿。

步骤3:通过libfreenect库获取深度图和彩色图,如图4所示。

步骤3.1:通过libfreenect2::frame声明的rgb、depth获得libfreenect2::frame::color和libfreenect2::frame::depth对象,并且将其保存在opencv的mat对象中。

步骤3.2:保存深度和彩色图像。通过opencv的boolimwrite(conststring&filename,inputarrayimg)函数,将rgb彩色图片和深度图片保存为jpg格式。

每隔1秒重复执行步骤3,相邻2张素材的角度变化幅度应不大于10度为最佳取材。直到拍摄结束。

步骤4:通过获取的深度图和彩色图合成点云,过程如图5所示。

步骤4.1:通过libfreenect2::registration::voidgetpointxyzrgb(constframe*undistorted,constframe*registered,intr,intc,float&x,float&y,float&z,float&rgb)获取点的x、y、z、rgb等信息,如图6所示。

步骤4.2:使用pcl::pointxyzrgba声明一个点对象p,将步骤3.1中获得的点信息传递给p。最后使用push_back()函数将其放入点云中。

步骤4.3:保存点云通过savepcdfile(conststd::string&file_name,constpcl::pointcloud<pointt>&cloud)函数将步骤3.4中获得的点云以pcd格式保存到本地并且实时展示在用户界面上,如图7所示。

每隔1秒重复执行步骤4,相邻2张素材的角度变化幅度应不大于10度为最佳取材。直到拍摄结束。

本发明中用户用kinectv2机器获取目标果实作物在不同且变化幅度10度左右的一系列二维图片、三维点云模型和深度图,导入本发明中的计算机程序;对于输入的一系列二维图像,进行特征提取与图片匹配,根据匹配结果,得到关键点、相机位置等场景信息进行稀疏点云重建;然后在稀疏点云的基础上进行稠密的点云重建;在已知相机位置的基础上进行三维点云模型拼接。

步骤5:对于步骤3的果实作物二维图像组提取特征并进行匹配,精确识别物体的局部特征,找出各张图片中的特征点,进行快速准确的两两匹配获得关键点。

步骤5.1:考虑到果实尺度较小,对于特征检测这一步,本发明使用的是具有尺度和旋转不变性且鲁棒性较强的sift描述子以提高准确性,这种离线算法在不需要考虑时间成本的情况下也较有优势。sift算法通过不同尺寸的高斯滤波器(dog)计算得到一个4*4*8=128维的特征向量,根据该向量进行特征匹配相比其他方法在精度上更有优势。

步骤5.2:第二步是匹配和建立特征匹配轨迹,如图3所示,采用欧式距离对图像进行两两匹配。本发明适用尺度较小,因而采用粗暴匹配的方法:对所有特征点都穷举计算距离。前端获取的每个图片的特征点被提取出来进行图片两两之间的特征点匹配,用f(i)表示图像i周围的特征点。对于每一个图像对i和j,考虑每一个特征f∈f(i)找到最近邻的特征向量c∈f(j)

当所有的两两匹配图像对被确定以后,本发明的算法会把多个图像中都出现的共同特征匹配点连接起来,形成图像特征匹配轨迹。然后利用宽度优先搜索bfs找到每个特征点的完整轨迹,依此构造图像连接图以便进行捆绑调整bundeadjustment。

步骤5.3:选择合适的初始化图像对,为了避免陷入局部最优,本发明采用5点法来估计初始化匹配对的外参,在轨迹三角化后提供初始化的3d点进行再第一次捆绑调整确保重建结果足够精确。

步骤5.4:本发明采用稀疏光束平差法sparsebundle(sba)进行捆绑调整。捆绑调整是一个迭代并根据一定条件除去误差较大的三维点的过程。这个过程最终结束后可以得到相机的位姿及关键点信息,并依此重建稀疏的三维点云模型。

采用上述拓展和改进方案的有益效果:能够精确对多幅二维图像进行数据和特征的提取,找出目标物体的特征点,从而快速准确进行两两匹配。

步骤6:利用稀疏点云模块,将获得的关键点和相机参数等信息用于实现稀疏点云的生成。并根据相机参数,进一步利用密集点云生成模块,不断进行面片生成与筛选从而扩散已有的稀疏点云数据点,实现密集点云获取,如图2所示。

步骤6.1:初始特征匹配,生成稀疏的面片,作为种子点。dog和harris算子,在每张像片上画格网,格网大小为32×32像素。在每个格网中选η=4个兴趣值为局部极大值的点。(两种算子都各取4个特征点)

步骤6.2:选取参考图像和其他图像。每张图像轮流作为参考影响r(p),在其他图像中选取与主光轴夹角小于60度的图像。在将参考影响和这些图像进行匹配。

步骤6.3:选取匹配点并求模型点坐标,生成面片后优化面片中心坐标和法向量。

步骤6.4:最大化平均相关系数,更新v(p)。然后扩散,由稀疏的种子点扩散得到密集的面片。目标是每个格网单元中至少有一个面片。

采用上述拓展和改进方案的有益效果:能够准确的从稀疏点云中得到稠密点云,从而使生成的点云模型更加接近目标实物。

步骤7:利用点云拼接模块,进行果实作物离散点云拼接。

步骤7.1:实现点云的读写及构成,该功能利用了pcl和opencv库中的pcd读写函数和:pcl::pcdreader、pcl::io::savepcdfileascii、cv::mat。

步骤7.2:利用eigen和pcl库中矩阵类和点云通过矩阵变换函数:eigen::matrix4f、pcl::transformpointcloud。实现相机外参矩阵的储存与运算和点云的旋转平移。

步骤7.3:对于pcd点云文件,通过pcl::transformpointcloud(source,result,transform)变换点云后,将变换后的点云逐个添加到最终输出的点云中,在点云的层面上简单高效地完成点云拼接。

步骤7.4:对于读取深度图和rgb图构成点云,利用vector库和cv::mat类存储rgb图和深度图,利用eigen::isometry3d类与vector库存储相机位姿。

步骤7.4.1:从vector<cv::mat>中读取一张rgb图并读取相应的深度图,逐行逐列访问像素信息并根据下列公式构建三维点:

其中d为深度值,depthscale为深度比例,x、y为二维坐标,cx、cy为相机畸变参数,fx、fy为相机焦距。

三维点坐标赋值完成后乘上变换矩阵t完将点变换到世界坐标系下,变换的公式如下:

其中a′为变换前的坐标向量,a为变换后的坐标向量,为变换矩阵t:由旋转矩阵r和平移向量t构成,r和t的具体数值来自于sfm步骤。

完成变换后,如图9所示,由于上述三维点与点云中的点格式不同,所以需要通过pcl::pointxyzrgb定义一个三维点并令其坐标及rgb值等于上述三维点,添加到最后要输出的点云上,在点的层面上完成精度较高地点云拼接。

步骤8:果实点云精确配准。本实验采用pcl库中的icp配准的方法对果实点云进行点云配准。

步骤8.1:使用函数icp.setinputcloud()设置原始果实点云以及使用函数icp.setinputtarget设置目标果实点云。

步骤8.2:使用函数setmaxcorrespondencedistance()设置最大对应点的欧式距离,只有对应点之间的距离小于该设置值的对应点才作为icp计算的点对。

步骤8.3:设置迭代中止条件。中止条件1为使用函数setmaximumiterations()设置最大迭代次数。中止条件2为使用函数settransfoemationepsilon()设置前后两次迭代的转换矩阵的最大容差。中止条件3为使用函数seteuclideanfitnessepsilon()设置前后两次迭代的点对的欧式距离均值的最大容差。

步骤8.4:使用函数getfinaltransformation()获取最终的配准的转换矩阵。计算出rx(θ)ry(α)rz(β)

然后根据其计算出转换矩阵

r=rz(β)ry(α)rx(θ)

步骤8.5:使用函数align(pointcloudsource&output)进行icp配准,输出变换后的果实点云,如图10所示。

步骤8.6:获取收敛状态。只要迭代过程符个上述三种中止条件之一,函数返回true。

步骤8.7:min_number_correspondences_最小匹配点对数量,由空间中的非共线的三点就能确定刚体变换。

步骤8.8:获取最终迭代中止点云。

步骤9:本发明采用保征去噪的方法来去除刺状果实点云周围所带的噪点。保征去噪相比较于其他方法可以更好的保留刺状果实点云的本身特征。对于本发明而言,在保征去噪的过程中分为三个部分,分别是大尺度去噪,特征检测以及优化和原物混合去噪。

步骤9:本发明采用保征去噪的方法来去除刺状果实点云周围所带的噪点。保征去噪相比较于其他方法可以更好的保留刺状果实点云的本身特征。对于本发明而言,在保征去噪的过程中分为三个部分,分别是大尺度去噪,特征检测以及优化和原物混合去噪。

步骤9.1:大尺度去噪。本发明提出了一种将背景噪声分类为远景噪声与近景噪声,解决了背景,离群等大尺度噪点的去除问题。

步骤9.1.1:远景去噪。本发明首先通过对点云进行分析,找出远景噪点分布最多的坐标轴向,以方便后续的大尺度去噪。在本发明中,通过对果实点云的分析,得出噪点最多的轴向为x轴。

步骤9.1.2根据上一步得到的结果,本发明通过分析得出去噪维度x,以及值域(xmin,xmax)。

步骤9.1.3遍历点云中每个点,并判断该点在指定维度上的值是否在值域内,删除取值不在值域的点,保留阈值内的点。

步骤9.1.4查看结果,若果实点云完整性被破坏,则重新设置值域;若点云远景噪点仍然比较多,则重新调整x阈值;如果远景噪点数量减少且果实完整,那么输出处理好的点云。

步骤9.1.5进一步设置指定维度y,z以及其阈值界限。

步骤9.1.6遍历点云中的每个点,通过判断每个点的y,z和其阈值的关系,不在范围的点将会被去除。

步骤9.1.7查看效果,若不符合所需结果,则返回步骤9.1.5重新选取阈值界限。符合该结果,则得到不含背景的点云cf1。

步骤9.1.8近景去噪。假定果实点云模型中数据点为pi,i=1,2…s,每个点pi到任一点的距离为di,设定点pi的一个领域k,则pi到它所有k个邻近点的平均距离用高斯分布表示。

步骤9.1.9根据均值μ和标准差σ,设定阈值范围tmax

步骤9.1.10根据平均距离和标准阈值范围tmax,将不满足阈值的点去除。

步骤9.1.11遍历点云中的每个点,并指定每一个点在确定半径r内最少近邻点数m,检测此点的真正近邻数量m和m的关系,则保留该点。反之,删除该点。从而得到了完全去除背景的点云cf2。

采用上述大尺度去噪的方法的有益效果:可以准确去除产生的大面积噪点,使处理后的数据点有利于下一步的使用。防止由于背景影响所导致的误差。

步骤9.2特征检测以及优化。本发明提出的刺状特征检测以及优化算法,可以用于在保征去噪的过程中,对类似刺状果实点云的刺状果实点云进行检测并优化,是下一步原物混合去噪的重要前提。

步骤9.2.1对去除背景之后的果实点云cf1,本发明对其中的每个点进行pca法向计算,可以用来计算其他几何属性。

步骤9.2.2根据获得的法向量计算曲率。并且重新定义cf1中各点的变化,表示为σ(pi)。λ分别表示协方差矩阵的特征值,λ1为最大特征值。该变化被设置为初始检测特征索引wc-max的权重。

步骤9.2.3本发明将某一点的曲率和法向量角加权结合,将步骤9.2.2中的权重改进,作为判断可能的锐利的特征点的第二全局特征判断指标。ni代表点的域,nr和cv分别表示法向和曲率的权重。其可以为以下特征点的细化做了充分的准备。

步骤9.2.4基于欧几里德平面上的有限个结果点集{p1,…,pn},本发明定义了一个由欧几里德平面上所有点组成的一个voronoi单元vp。这些点到空间x中非空子集的元组pk的距离小于其到任何其他站点pi的距离。表示为

vp={x∈x|d(x,pk)≤d(x,pj)forallj≠k}

步骤9.2.5计算voronoi单元vp的协方差矩阵作为方程。其中vp表示与采样点pi相关联的有限voronoi单元。vp的协方差矩阵由其相对于质心ss的二阶矩定义。

步骤9.2.6采用联合域解决方案来抵抗噪声的影响,其中单个单元被一个voronoi单元联合所取代。基于步骤9.2.5中协方差矩阵最小特征值与最大特征值之比的各向异性v(pi),算了水果模型中点的各向异性因子σ∈[0,1]。选择该点的k-最近邻qj(j=1,2,…k)。对v(pi)∪v(qj)(j=1,2,…k逐步进行循环处理。直到各向异性达到α阈值或pi的邻点数达到最大值。最后,我们将一个联合沃罗诺伊细胞的协方差矩阵计算为方程。

步骤9.2.7利用改联合矩阵特征值比确定特征点的可能性。其中cf表示特征点的可能性,λmin和λmax分别是最小和最大特征值。

cf=λmin/λmax

步骤9.2.8本发明对细化特征的关键特征判断指标进行放大,其中r的重缩放表示放大系数。wf可以合理的提高特征强度,从而可以设置一个更好的阈值来判断特征点云。

wf=rsrescale×cf

步骤9.2.9本发明提出了一种基本扩散方法,允许点沿法向运动。并对h(v)进行改进。xi表示中心顶点,a表示voronoi单元面积之和,αj,βj为与voronoi单元具有相同边缘eij的不同角度。

步骤9.2.10本发明提出了一种基于误差校正的各向异性平均曲率流,该流通过组合选择器来确保平滑时的特征。其中g(·)=1/(1+k·x2),k由使用者确定;g和(1-g)表示控制因子。

采用上述拓展和改进方案的有益效果是,可以通过多尺度全局几何特征检测和基于联合vcm各向异性曲率特征稀疏,更准确地将刺状果实的本身特征提取出来,并且将误判作为特征的点进行优化。为下一步原物混合去噪提供了基础。

步骤9.3本发明提出的刺状果实原物混合噪点的去除方法,通过l0范数约束下的曲率均值漂移,解决保持果实刺状尖锐特征的原物混合噪点的去除问题。

步骤9.3.1计算法向量。将协方差矩阵对角化的三个特征值中最小特征值对应的特征向量作为法向量。表示为:

cov(u)·ni=λmin·ni

步骤9.3.2为了构造约束模型,本发明将第i个采样点表示为ci,在局部领域中测量表面的光滑度和特征的稀疏度。最终约束表示为:

步骤9.3.3通过对各点约束的累积,构造出整个水果模型的l0稀疏约束,在本发明中,wi定义了领域的大小。表示为:

步骤9.3.4更具l0优化的定义,最终的问题被表示为采用交替优化法,通过约束前一个|ni|=1来求解该方程,从而得到约束二次。表示为:

步骤9.3.5本发明通过如下步骤9.3.1中的正态ni估计值来恢复先前去噪过程中丢失的特征。

步骤9.3.6本发明基于特征点集cff(pi),给出了在l0morn约束下水果特征的曲率位移优化,同时d(·)用于确定每个点偏差程度。表示为:

步骤9.3.7本发明以局部平均曲率hi为参数,随着曲率的增大,偏差变大。通过多项式拟合,将每个点的多项式拟合曲率定义为并给出局部平均曲率hi。表示为:

步骤9.3.8定义基于曲率的均值偏移。本发明中向量pi的维数为7,将pi的k最近邻点用n(pi)={qi1,qi2,,…qik}表示。g(·)为高斯核,m(pi)是pi相关的平均位移点,mv(pi)是与pi相关的平均移位矢量。将pi的平均位移矢量定义为:

步骤9.3.9本发明的均值偏移过程如下式所示,对每个点采用均值漂移后,得到干净的水果点云cf3,,如图8所示。

m(pi):=m(pi)+mv(pi)

采用上述拓展和改进方案的有益效果是解决保持果实刺状尖锐特征的原物混合噪点的去除问题。在尽可能将噪点去除干净的情况下,同时更好的保留了刺状果实的尖锐特征。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1