一种基于深度图像的立方物体体积测量方法与流程

文档序号:19421634发布日期:2019-12-14 01:34阅读:484来源:国知局

本发明涉及深度图像的目标识别领域,特别涉及一种基于深度图像的立方物体体积测量方法。



背景技术:

深度图像也被称为距离影像,是指将从图像采集器到场景中各点的距离作为像素值的图像,它直接反映了目标可见表面的几何形状,因此,基于深度图像的应用比较广泛,尤其是在物流行业。目前,国内物流、港口航运、机场航运的吞吐量非常大,且呈递增趋势,各个分拣中心对包裹、货物、货柜等体积的测量比较局限和耗时,降低了运输效率。

现有技术中,包裹多为立方物体状,对包裹的体积测量主要通过比对传输带装货前和装货后的深度图像,提取包裹所在的矩形区域获知包裹的长宽,利用差异特征获取包裹的高度,计算包裹的体积,这种方式局限于特定场景,应用范围较小,无法满足实际物流行业中包裹密集堆积的需求;另外现有技术对于立方物体的多个面难以准确检测,且受外界环境噪声干扰,影响计算精度,且基本没有对立方物体状的平面进行区分,容易造成长方体状的物体长宽高的误判,导致体积计算误差较大。目前对大型的货物、货柜的体积测量也基本采用手工测量。



技术实现要素:

为解决现有技术中对立方物体状包裹、货物、货柜等目标的体积测量局限和耗时的问题,本发明提出一种基于深度图像的立方物体体积测量方法。

本发明的技术方案是这样实现的:

一种基于深度图像的立方物体体积测量方法,包括:

s1、获取目标的深度图像,根据深度图像分别获取与其大小相同的x方向和y方向的梯度图;s2、根据梯度图对其中的像素点分成水平面、左垂面和右垂面三类,获取深度图像的边缘点图;s3、根据分类结果、梯度图和边缘点图获取深度图像中目标的上表面、左垂面和右垂面的分割图像;s4、对边缘点图进行边缘线检测,将检测到的所有边缘线进行聚类与合并,获取共线边缘线组集合;s5、根据共线边缘线组集合的每组最长的边缘线提取角点;s6、对提取的角点进行配对;s7、根据获取的四边形和上表面分割图像确定立方物体的上表面和整体轮廓;s8、根据立方物体的上表面拟合其在三维空间的平面,通过多次重复拟合剔除每个面上的噪声点,获取上表面对应的理想点集合,根据理想点集合进行轮廓检测,获取上表面的轮廓边缘线;s9、根据上表面的轮廓边缘线确定上表面四边形;s10、根据上表面四边形计算立方物体的长和宽,并拟合地平面所在的三维平面,根据上表面和地平面间的距离计算立方物体的高,计算立方物体的体积。

优选的是,s3中根据分类结果、梯度图和边缘点图获取深度图像中目标的上表面、左垂面和右垂面的分割图像的具体方式为:

根据分类结果获取与梯度图大小相同的水平面、左垂面和右垂面的二值图,定义与梯度图大小相同的上表面分割图像,设定像素点的初始值为0;

从下到上遍历水平面的二值图中第一列的像素点,根据深度图获取每个像素点的可信度值,给定可信度阈值,若该像素点的可信度值小于给定的可信度阈值,则该像素点的状态为未知,处理下一像素点;否则,若对应的像素点值为255,则该像素点的状态为水平,若对应的像素点为0,则该像素点的状态为垂直,若像素点值为0的像素点的数目大于给定的高度阈值,则将其后出现的像素点值为255的像素点对应在上表面分割图像上并将其像素值更新为255,记录每一次像素点状态发生转变的像素点所在的行数,遍历完第一列所有行的像素点后,将从记录的行数起到第1行的第一列所有像素点对应在上表面分割图像上的位置的像素值置为0,同样的方式遍历完平行面图像的所有行列,获取初始的上表面分割图像,对获取的初始的上表面分割图像进行修补,更新上表面分割图像;

将边缘点图中的边缘点分别一一对应在更新后的上表面分割图像、左垂面的二值图和右垂面的二值图中,将更新后的上表面分割图像中水平状态的非边缘点的像素点值更新为0,将左垂面的二值图中非边缘点的像素值为255的像素点值更新为0,将右垂面的二值图中非边缘点的像素值为255的像素点值更新为0,获取最终的上表面分割图像、左垂面的二值图和右垂面的二值图,将左垂面的二值图和右垂面的二值图分别记作左垂面的分割图像和右垂面的分割图像。

优选的是,获取深度图像的边缘点图的具体方式为:

计算分类后的垂直面的所有像素点的y方向的梯度平均值yp、水平面的所有像素点的y方向的梯度平均值yq、左垂面的所有像素点的x方向的梯度平均值xp以及右垂面的所有像素点的x方向的梯度平均值xq;根据yp、yq、xp、xq设定y方向正阈值、y方向负阈值、x方向正阈值、x方向负阈值;定义一个与梯度图大小相同的图像,该图像中的像素点的初始值设定为0;遍历x方向的梯度图和y方向的梯度图的所有像素点,对于每一个像素点,如果其y方向的梯度值的绝对值大于x方向的梯度值的绝对值,且小于y方向负阈值或大于等于y方向正阈值,该像素点为边缘点,将该像素点对应到定义的图像中并将其像素值更新为255;如果其y方向的梯度值的绝对值小于x方向的梯度值的绝对值,且其x方向的梯度值的绝对值小于等于x方向负阈值或大于等于x方向正阈值,该像素点为边缘点,将该像素点对应到定义的图像中并将其像素值更新为255;得到边缘点图。

优选的是,对边缘点图进行边缘线检测,将检测到的所有边缘线进行聚类与合并,获取共线边缘线组集合的具体方式为:

对边缘点图进行边缘线检测,获取所有边缘线并按照长到短排序成边缘线集合,定义一个空的共线边缘线组集合,共线边缘线组集合包含多组边缘线,每组内的边缘线是共线的,两组间边缘线是不共线的,首先将最长的边缘线加入到共线边缘线组集合的一组中,对于边缘线集合中的每一条a边缘线,判断其与共线边缘线组集合的每组最长的b边缘线是否共线,判断条件依次如下:

c1、计算a边缘线与b边缘线的角度差,判断该角度差是否小于等于给定的角度差阈值e;

c2、若角度差小于等于角度差阈值e,计算b边缘线的起点到a边缘线的起点和终点的距离t1和t2,b边缘线的终点到a边缘线的起点和终点的t3和t4,给定点间距离阈值g,判断距离t1、t2、t3和t4中的最小距离是否小于等于点间距离阈值g;

c3、若min(min(t1,t2),min(t3,t4))≤g,计算a边缘线的长度l和b边缘线的长度h,判断距离t1、t2、t3和t4中的最大距离是否小于g+h+l;

c4、若max(max(t1,t2),max(t3,t4))<(g+h+l),计算b边缘线的起点和终点到a边缘线的距离s1和s2,a边缘线的起点和终点到b边缘线的距离s3和s4,给定距离阈值j,若t1和t2的最大距离小于l+g,判断s1是否小于等于j;若距离t3和t4的最大距离小于l+g,判断s2是否小于等于j;若距离t1和t3的最大距离小于l+g,判断s3是否小于等于j;若距离t2和t4的最大距离小于l+g,判断s4是否小于等于j;若任意最大距离均大于等于l+g则直接执行下一步骤;

c5、若满足c4中的条件,则a边缘线和b边缘线共线,将a边缘线加入到共线边缘线组集合的该组中,更新该组的边缘线;

判断过程中,任一个条件不满足,直接处理共线边缘线组集合中的下一组的最长边缘线,直至处理完共线边缘线组集合的所有组,每组边缘线用其最长边缘线表示,如果a边缘线与共线边缘线组集合的所有组的最长边缘线均不共线,则直接将a边缘线加入到共线边缘线组集合的新组中,更新共线边缘线组集合的组数;a边缘线和b边缘线共线后,判断a边缘线和b边缘线是否满足合并条件,若t1≤h、t2≤h、t3≤h且t4≤h,则a边缘线与b边缘线不满足合并条件,否则,将a边缘线和b边缘线合并,更新b边缘线的起点和终点,更新共线边缘线组集合;

与处理a边缘线相同的方式处理边缘线集合中的下一条边缘线,不断更新共线边缘线组集合,共线边缘线组集合中每组的边缘线按照长短排序,获取最终的共线边缘线组集合。

优选的是,根据共线边缘线组集合的每组最长的边缘线提取角点的具体方式为:

c1、获取共线边缘线组集合的每组的最长边缘线,记作种子边缘线集合,将种子边缘线集合的所有边缘线按从长到短排序,遍历种子边缘线集合的所有边缘线,从其中最长的c边缘线开始计算其与其余任一条d边缘线的夹角a,a的范围是0到180度,给定弯曲度阈值b,判断min(a,180-a)是否大于b;

c2、若min(a,180-a)>b,计算c边缘线与d边缘线的交点w(wx,wy),判断wx或wy是否未超出图像范围;

c3、若wx或wy未超出图像范围,判断交点w是否是角点,判断交点w是角点的条件为:先计算c边缘线的两个端点到交点w的距离d1和d2,定义最小距离min_d1,如果交点w在c边缘线的两个端点之间,则min_d1=0,否则min_d1=min(d1,d2),若最小距离min_d1不为0或min(d1,d2)小于给定的臂长阈值z1,再计算d边缘线的两个端点到交点w的距离d3和d4,定义最小距离min_d2,如果交点w在d边缘线的两个端点之间,则min_d2=0,否则min_d2=min(d3,d4),若最小距离min_d2不为0或min(d3,d4)小于给定的臂长阈值z2,判断min(d1,d2)和min(d3,d4)是否小于给定的交点半径阈值r;

c4、若满足c3的条件,给定四边形臂间差距阈值v,判断max(min(d1,d2),min(d3,d4))是否小于等于v,若满足则交点w是四边形的角点;

该条件c1到c4中依次判断,任一个条件不满足,则处理下一条边缘线;

将获取的第一个角点添加到角点集合中,对于获取的其余角点,将计算其与角点集合中所有角点的距离li,i为变量,判断与角点集合中的所有角点是否相似,若li<r,并与其余角点不相似,将该角点添加到角点集合中;

该交点w对应两条臂,第一条臂为其与c边缘线的终点的连线,第二条臂为其与d边缘线的终点的连线,c边缘线的终点为c边缘线中d1和d2中较大的对应端点,d边缘线的终点为d边缘线中d3和d4中较大的对应端点;同样的方式处理种子边缘线组集合中的其余任两条边缘线,获取所有的角点,根据种子边缘线集合扩展每个角点的两臂,得到最终的角点集合,实现角点提取。

优选的是,对提取的角点配对的具体方式为:

c1、对角点集合中的所有角点进行两两配对,若配对的两个角点的坐标不同,则继续判断两个角点之间是否共享一个臂,将一个角点的两臂标记为arm11和arm12,另一个角点的两臂记为arm21和arm22,先判断arm11和arm21是否为两个角点的同一个臂;

c2、判断arm11和arm21是同一臂的方式为:若两个角点之间的距离大于arm11和arm21的最小值的四分之一,先计算arm11与两个角点连线的角度差的绝对值x1,arm21与两个角点连线的角度差的绝对值x2,x1和x2的取值范围是[0,180],给定角度相似阈值f,若x1和x2均小于角度相似阈值f,给定角点间距离阈值u和长度比例阈值ratio,若arm11和arm21的长度和大于等于两个角点距离的ratio倍,并大于等于两个角点的距离与u的差值,则判定arm11和arm21是同一臂,角点配对成功;

否则,采用同样的方法判断两个角点的其余任两个臂是否是同一臂,若均不是则角点配对失败,否则角点配对成功;

同样的方式对其余的角点两两配对,获取所有配对成功的角点组合,每个角点组合的同一臂为共享臂,另两个臂为打开臂,计算每一个角点组合中两个打开臂与共享臂之间的夹角u1和u2,夹角u1和u2的取值范围是[0,180],将夹角u1或u2小于弯曲度阈值b的角点组合剔除;对剩余的角点组合,判断其两个打开臂是否在共享臂的同一侧,将两个打开臂不在共享臂的同一侧的角点组合剔除,最后根据当前配对的角点组合确定一个四边形;同样的方式处理所有的角点组合,获取所有的四边形。

优选的是,s8中获取上表面的轮廓边缘线的具体方式为:

c1、遍历所有检测到的每个立方物体的上表面的所有像素点,根据图像坐标系和世界坐标系间的变换关系获取上表面的所有像素点在三维空间的世界坐标点;

c2、遍历当前上表面的所有世界坐标点,给定点数阈值,判断所有的点数是否大于给定的点数阈值;

c3、若点数大于点数阈值,计算所有点的均值点并进行归一化处理,每个立方物体的上表面的所有坐标点在三维空间中位于同一平面,均值点位于该平面上,计算均值点所在的三维空间的平面的法向量,根据法向量和均值点获取其初次拟合三维平面方程;

c4、计算上表面的所有世界坐标点到初次拟合三维平面的距离,给定距离阈值,剔除距离大于给定距离阈值的所有点,获取理想点集合,根据理想点集合再次进行拟合,获取二次拟合三维平面方程;

c5、重复上述步骤进行多次重复拟合,每次拟合后计算理想点集合的所有点到拟合三维平面的距离,剔除距离大于给定距离阈值的所有点,更新理想点集合,记作上理想点集合;

c6、获取当前上表面的上理想点集合的所有世界坐标点对应在二维平面的平面坐标点,并根据其进行轮廓检测,获取所有轮廓,计算每个轮廓的外接矩形与当前上表面的外接矩形的重叠面积,寻找重叠面积最大且大于给定的阈值的轮廓,该轮廓即为上表面最终的轮廓,根据该轮廓计算上表面的凸包,根据其凸包获取其对应的拟合多边形,获取上表面的拟合多边形的所有边缘线并按照从长到短排序,这些边缘线即为上表面的轮廓边缘线。

优选的是,s9中根据上表面的轮廓边缘线确定上表面四边形的具体方式为:

给定平行角度差阈值j,判断任两条轮廓边缘线的角度差是否小于j,若满足该条件,则当前两条轮廓边缘线为同一组,将所有轮廓边缘线分组,若分组后的总组数大于等于2,计算每组的轮廓边缘线的总长度并从大到小排序,将总长度最大的两个组别记作组1和组2,则组1包含上表面四边形的一组近似平行的边,组2包含上表面四边形的另一组近似平行的边,若分组后的总组数小于2,处理下一上表面;

分别计算组1和组2中任两条轮廓边缘线的距离差,给定平行距离差阈值,分别将组1和组2中距离差小于平行距离差阈值的轮廓边缘线划分为同一组,若组1中划分后的总组数大于等于2,计算组1中每组的边缘线的总长度并从大到小排序,将总长度最大的两个组别记作组11和组12,若组2中划分后的总组数大于等于2,计算组2中每组的边缘线的总长度并从大到小排序,将总长度最大的两个组别记作组21和组22,若组1或组2划分后的总组数小于2,处理下一上表面;

遍历上表面轮廓的所有像素点,分别计算每个像素点到到组11、组12、组21和组22的所有轮廓边缘线的距离,获取每个组距离最小且小于给定阈值的轮廓边缘线,即为上表面的四条边。

优选的是,s10中计算立方物体的体积的具体方式为:

对上表面四边形的任一条边,记作边1,与边1近似平行的边记作边2,计算边1所有边缘点到边2所在垂直面的距离,同时计算边2所有边缘点到边1所在垂直面的距离,计算所有距离的平均值作为当前上表面对应的立方物体的长;

对上表面四边形的另外两条近似平行边分别记作边3和边4,计算边3所有边缘点到边4所在垂直面的距离,同时计算边4所有边缘点到边3所在垂直面的距离,计算所有距离的平均值作为当前上表面对应的立方物体的宽;

计算上表面四边形的所有点到地平面的拟合三维平面的距离并求均值,该均值即为立方物体的高,根据立方物体的长宽高计算立方物体的体积。

优选的是,获取地平面的拟合三维平面的方式为:定义与梯度图大小相同的地平面图像,设定像素点的初始值为0;遍历水平面的二值图和上表面分割图像,将在水平面的二值图中的像素点值为255且在上表面分割图像中的像素点值为0的像素点对应在地平面图像上的像素点值更新为255,获取地平面图像;计算地平面图像上所有像素点值为255的像素点在三维空间的世界坐标点,计算所有像素点的均值点并进行归一化处理,地平面图像的所有坐标点以及均值点在三维空间中在同一平面上,计算其所在的三维空间的平面的法向量,根据地平面的均值点和法向量获取地平面的拟合三维平面方程,拟合后计算地平面图像上像素点值为255的像素点到拟合三维平面方程的距离,剔除距离大于给定阈值的像素点,获取属于地平面点的理想点集合,根据理想点集合再次拟合地平面的三维平面方程,计算地平面点的理想点集合的所有像素点到拟合三维平面方程的距离,剔除距离大于给定阈值的像素点,更新地平面点的理想点集合,多次重复拟合剔除噪声点后获取地平面的最终的拟合三维平面方程。

本发明的有益效果为:本发明的基于深度图像的立方物体体积测量方法,在通过分割图像快速区分出立方物体的表面的基础上,将检测到的所有边缘线进行聚类与合并,获取所有共线的边缘线组别,选取每组最长边缘线获取角点,减少计算量,提高检测的稳定性;再进行角点配对,获取所有可能的四边形检测,然后通过检测上表面分割图像获取所有的上表面轮廓,并将上表面轮廓与所有检测到的四边形进行匹配,获取立方物体上表面和立方物体整体轮廓,并根据立方物体的上表面拟合其在三维空间的平面,每次拟合后剔除到其拟合三维平面距离较大的点,经过多次重复拟合剔除每个面上的噪声点,增加拟合的精确性,提高算法的稳定性;根据拟合后的上表面获取其上表面四边形的所有可能的轮廓边界线,并分别根据角度和边界线间的距离进行分组,能够组成上表面的四边形的四条边必然包含两组近似平行的边,且两组边间角度不同,对于每组近似平行的边,两侧的边之间必然存在一定的距离,利用这种特性获取上表面所有轮廓边界线中能够组成上表面四边形的最长边界线,实现上表面四边形的最终确定,并根据上表面两组边获取立方物体的长和宽,根据上表面的四条边计算其每个边界点到地平面的距离,获取立方物体的高,计算立方物体的体积。像素点分类方法适用于任意场景的任意物体,实际应用在体积测量中,立方物体在图像中至少包含可见的上表面和一个垂直面,深度图像中目标所在的平面是最低的平面或者直接在地面上。

本发明的立方物体体积测量方法应用在包裹、货物、货柜等目标的体积测量中,避免比对传输带装货前和装货后的深度图像,而是直接识别立方物体,最后得到立方物体的长宽高计算其体积,解决了包裹体积测量局限和耗时的问题,帮助物流行业提高包裹分拣效率,具有重要的实际应用意义。本发明的立方物体体积测量方法,也可在图像识别领域应用。

具体实施方式

下面对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例:一种基于深度图像的立方物体体积测量方法,s1、获取目标的深度图像,根据深度图像分别获取与其大小相同的x方向和y方向的梯度图;s2、根据梯度图对其中的像素点分成水平面、左垂面和右垂面三类,获取深度图像的边缘点图;s3、根据分类结果、梯度图和边缘点图获取深度图像中目标的上表面、左垂面和右垂面的分割图像;s4、对边缘点图进行边缘线检测,将检测到的所有边缘线进行聚类与合并,获取共线边缘线组集合;s5、根据共线边缘线集合的所有边缘线提取角点;s6、对提取的角点进行配对;s7、根据获取的四边形和上表面分割图像确定立方物体的上表面和整体轮廓;s8、根据立方物体的上表面拟合其在三维空间的平面,通过多次重复拟合剔除每个面上的噪声点,获取上表面面对应的理想点集合,根据理想点集合进行轮廓检测,获取上表面的轮廓边缘线;s9、根据上表面的轮廓边缘线确定上表面四边形;s10、根据上表面四边形计算立方物体的长和宽,并拟合地平面所在的三维平面,根据上表面和地平面间的距离计算立方物体的高,计算立方物体的体积。

深度图像可采用深度相机获取,目前的深度相机根据其工作原理可以分为三种:tof(timeofflight)深度相机、双目立体视觉深度相机和结构光深度相机,实际使用中可根据具体需求选择合适的深度相机获取深度图像。地平面指的是深度图像中最低的平面,实际应用在体积测量时,立方物体放置的平面为深度图像中最低的平面。

s2中根据梯度图对其中的像素点分成水平面、左垂面和右垂面三类的具体方式为:遍历x方向的梯度图中的每个像素点值dx(r,c),y方向的梯度图中的每个像素点值dy(r,c),其中r=0...m,c=0...n,m代表所在梯度图的行数,n代表所在梯度图的列数;给定正分割阈值p和负分割阈值q,大于等于p的dy(r,c)对应的像素点位于垂直面,小于等于q的dy(r,c)对应的像素点位于水平面;对于所有垂直面上的点,小于等于q的dx(r,c)对应的像素点位于左垂面,大于等于p的dx(r,c)对应的像素点位于右垂面。

s2中获取深度图像的边缘点图的具体方式为:计算分类后的垂直面的所有像素点的y方向的梯度平均值yp、水平面的所有像素点的y方向的梯度平均值yq、左垂面的所有像素点的x方向的梯度平均值xp以及右垂面的所有像素点的x方向的梯度平均值xq;根据yp、yq、xp、xq设定y方向正阈值、y方向负阈值、x方向正阈值、x方向负阈值;定义一个与梯度图大小相同的图像,该图像中的像素点的初始值设定为0;遍历x方向的梯度图和y方向的梯度图的所有像素点,对于每一个像素点,如果其y方向的梯度值的绝对值大于x方向的梯度值的绝对值,且小于y方向负阈值或大于等于y方向正阈值,该像素点为边缘点,将该像素点对应到定义的图像中并将其像素值更新为255,如果其y方向的梯度值的绝对值小于x方向的梯度值的绝对值,且其x方向的梯度值的绝对值小于等于x方向负阈值或大于等于x方向正阈值,该像素点为边缘点,将该像素点对应到定义的图像中并将其像素值更新为255;得到边缘点图,边缘点图是二值图。

s3中根据分类结果、梯度图和边缘点图获取深度图像中目标的上表面、左垂面和右垂面的分割图像的具体方式为:根据分类结果获取与梯度图大小相同的水平面、左垂面和右垂面的二值图,定义与梯度图大小相同的上表面分割图像,设定像素点的初始值为0;从下到上遍历水平面的二值图中第一列的像素点,根据深度图获取每个像素点的可信度值,给定可信度阈值,若该像素点的可信度值小于给定的可信度阈值,则该像素点的状态为未知,处理下一像素点;否则,若对应的像素点值为255,则该像素点的状态为水平,若对应的像素点为0,则该像素点的状态为垂直,若像素点值为0的像素点的数目大于给定的高度阈值,则将其后出现的像素点值为255的像素点对应在上表面分割图像上并将其像素值更新为255,记录每一次像素点状态发生转变的像素点所在的行数,遍历完第一列所有行的像素点后,将从记录的行数起到第1行的第一列所有像素点对应在上表面分割图像上的位置的像素值置为0,同样的方式遍历完平行面图像的所有行列,获取初始的上表面分割图像;对获取的初始的上表面分割图像进行修补,更新上表面分割图像;将边缘点图中的边缘点分别一一对应在更新后的上表面分割图像、左垂面的二值图和右垂面的二值图中,将更新后的上表面分割图像中水平状态的非边缘点的像素点值更新为0,将左垂面的二值图中非边缘点的像素值为255的像素点值更新为0,将右垂面的二值图中非边缘点的像素值为255的像素点值更新为0,获取最终的上表面分割图像、左垂面的二值图和右垂面的二值图,将左垂面的二值图和右垂面的二值图分别记作左垂面的分割图像和右垂面的分割图像。

在计算过程中,由于噪声干扰可能出现上表面上的个别点被误判为垂直面的点,导致上表面点不连续,为提高算法稳定性,对上表面分割图像进行修补。对获取的初始的上表面分割图像进行修补的具体方式为:给定图像片大小阈值t,定义与上表面分割图像大小相同的上表面修补图像,设定像素点的初始值为0,根据上表面分割图像更新上表面修补图像的第t列到总列数减去t列的像素点值,遍历上表面分割图像的所有行和第1到第2*t列,将上表面修补图像的每行的第t列的每个像素点值更新为上表面分割图像的当前行的第1到第2*t列的像素点值之和,更新上表面修补图像;遍历上表面分割图像的所有行和第t+1列到总列数减去t列,将上表面修补图像的每个像素点值更新为当前行当前列的前一列的上表面修补图像像素点值加上当前行当前列加上t列的的上表面分割图像的像素点值再减去当前行当前列减去t列的的上表面分割图像的像素点值,获取最终的上表面修补图像;遍历上表面修补图像的所有像素点,给定像素值总和阈值,如果当前像素点的像素值大于给定的像素值总和阈值,则将其对应在上表面分割图像上的像素值更新为255,否则更新为0,更新上表面分割图像。

记录每一次像素点状态发生转变的像素点所在的行数,在s1中获取目标的深度图像,目标在深度图像中完全能够看到,从下向上遍历每一列像素点,如果先后出现立方物体的垂直面和水平面,则之后的像素点类别一定会再发生改变,将最后一次记录的像素点状态发生改变的位置对应的行数到第一行的当前列的所有像素点对应在上表面分割图像上的像素值置为0(记录行数到第一行的点值有可能是0也有可能是255,统一置为0);否则很有可能当前立方物体的上表面没有完全出现在画面中,剔除这种上表面的点,将其对应在上表面分割图像上的像素值置为0。

s4中对边缘点图进行边缘线检测,将检测到的所有边缘线进行聚类与合并,获取共线边缘线组集合的具体方式为:对边缘点图进行边缘线检测,获取所有边缘线并按照长到短排序成边缘线集合,定义一个空的共线边缘线组集合,共线边缘线组集合包含多组边缘线,每组内的边缘线是共线的,两组间边缘线是不共线的,首先将最长的边缘线加入到共线边缘线组集合的一组中,对于边缘线集合中的每一条a边缘线,判断其与共线边缘线组集合的每组最长的b边缘线是否共线,判断条件依次如下:c1、计算a边缘线与b边缘线的角度差,判断该角度差是否小于等于给定的角度差阈值e,该角度差大于e,a边缘线和b边缘线肯定不共线,因为共线的两条边缘线应该近似平行,角度差比较小;c2、若该角度差小于等于e计算b边缘线的起点到a边缘线的起点和终点的距离t1和t2,b边缘线的终点到a边缘线的起点和终点的t3和t4,给定点间距离阈值g,距离t1、t2、t3和t4中的最小距离是否小于等于点间距离阈值g,此部分是为了检测a边缘线和b边缘线的两个端点间的最小距离是否小于给定的点间距离阈值g,如果最小距离大于给定的点间距离阈值,说明这两条边缘线离得比较远,min(min(t1,t2),min(t3,t4))>g,则a和b边缘线肯定不共线;c3、若min(min(t1,t2),min(t3,t4))≤g,计算a边缘线的长度l和b边缘线的长度h,判断距离t1、t2、t3和t4中的最大距离是否小于g+h+l,max(max(t1,t2),max(t3,t4))≥(g+h+l),a和b边缘线不共线;c4、若max(max(t1,t2),max(t3,t4))<(g+h+l),计算b边缘线的起点和终点到a边缘线的距离s1和s2,a边缘线的起点和终点到b边缘线的距离s3和s4,给定距离阈值j,若t1和t2的最大距离小于l+g,判断s1是否小于等于j;若距离t3和t4的最大距离小于l+g,判断s2是否小于等于j;若距离t1和t3的最大距离小于l+g,判断s3是否小于等于j;若距离t2和t4的最大距离小于l+g,判断s4是否小于等于j;若任意最大距离均大于等于l+g则直接执行下一步骤;c5、满足c4中的条件,则a边缘线和b边缘线共线,将a边缘线加入到共线边缘线组集合的该组中,更新该组的边缘线;在上述c1到c6的依次判断过程中,任一个条件不满足,直接处理共线边缘线组集合中的下一组的最长边缘线,直至处理完共线边缘线组集合的所有组,每组边缘线用其最长边缘线表示,如果a边缘线与共线边缘线组集合的所有组的最长边缘线均不共线,则直接将a边缘线加入到共线边缘线组集合的新组中,更新共线边缘线组集合的组数;a边缘线和b边缘线共线后,判断a边缘线和b边缘线是否满足合并条件,若t1≤h、t2≤h、t3≤h且t4≤h,则a边缘线与b边缘线不满足合并条件,否则,将a边缘线和b边缘线合并,更新b边缘线的起点和终点,更新共线边缘线组集合;与处理a边缘线相同的方式处理边缘线集合中的下一条边缘线,不断更新共线边缘线组集合,共线边缘线组集合中的边缘线按照长短排序,获取最终的共线边缘线组集合。

此处进行边缘线的共线聚类与合并主要是因为在边缘线检测过程中,往往会因为噪声干扰导致原本连续的边缘线断开,原本只有一条边缘线在检测时可能检测到多条近似平行距离很近但长短不一的多条边缘线,会降低算法的稳定性和精度,进行共线聚类与合并主要是为了将有可能属于同一条线的多条线段划分为同一组,并进行合并,将断开的多条共线边缘线进行合并,获取每组的最长边缘线,用最长边缘线表示该组的所有边缘线,一方面减少了计算量,另一方面提高算法的稳定性。

将a边缘线和b边缘线合并,更新b边缘线的起点和终点的方式为:b边缘线为其所在组别的最长边缘线,若a边缘线和b边缘线共线且满足合并条件,则根据a边缘线更新b边缘线的起点和终点,,如果边缘线的两端点x坐标不同,定义边缘线的左侧端点为起点,右侧端点为终点,如果两端点x坐标相同,则定义上面的端点为起点,下面的端点为终点。更新b边缘线的终点的判断方式为:c1、若t1>h且t2>h,在此基础上,t3>t4,则将b边缘线终点更新为a边缘线的起点,不满足t3>t4的条件,将b边缘线终点更新为a边缘线的终点;c2、不满足c1中的条件t1>h且t2>h,若t1>h但t2<=h,则将b边缘线终点更新为a边缘线的起点;c3、不满足c1和c2中的条件,如果t2>h但t1<=h,则将b边缘线终点更新为a边缘线的终点。更新b边缘线的起点的判断方式为:c1、若t3>h且t4>h,在此基础上,t1>t2,则将b边缘线起点更新为a边缘线的起点,若不满足t1>t2的条件,将b边缘线起点更新为a边缘线的终点;c2、不满足c1中的条件t3>h且t4>h,若t3>h但t4<=h,则将b边缘线起点更新为a边缘线的起点;c3、不满足该c1和c2中的条件,若t4>h但t3<=h,则将b边缘线起点更新为a边缘线的终点。

s5中根据共线边缘线组集合的每组最长的边缘线提取角点的具体方式为:c1、获取共线边缘线组集合的每组的最长边缘线,记作种子边缘线集合,将种子边缘线集合的所有边缘线按从长到短排序,遍历种子边缘线集合的所有边缘线,从其中最长的c边缘线开始计算其与其余任一条d边缘线的夹角a,a的范围是0到180度,给定弯曲度阈值b,判断min(a,180-a)是否大于b;c2、若min(a,180-a)>b,计算c边缘线与d边缘线的交点w(wx,wy),判断wx或wy是否未超出图像范围;若wx或wy超出图像范围,开始处理下一条边缘线;c3、若wx或wy未超出图像范围,判断交点w是否是角点,判断交点w是角点的条件为:先计算c边缘线的两个端点到交点w的距离d1和d2,定义最小距离min_d1,如果交点w在c边缘线的两个端点之间,则min_d1=0,否则min_d1=min(d1,d2),若最小距离min_d1不为0或min(d1,d2)小于给定的臂长阈值z1,再计算d边缘线的两个端点到交点w的距离d3和d4,定义最小距离min_d2,如果交点w在d边缘线的两个端点之间,则min_d2=0,否则min_d2=min(d3,d4),若最小距离min_d2不为0或min(d3,d4)小于给定的臂长阈值z2,判断min(d1,d2)和min(d3,d4)是否小于给定的交点半径阈值r;c4、若满足c3的条件,给定四边形臂间差距阈值v,判断max(min(d1,d2),min(d3,d4))是否小于等于v,若不满足处理下一条边缘线,若满足则交点w是四边形的角点;该条件c1到c4中依次判断,任一个条件不满足,则处理下一条边缘线;将获取的第一个角点添加到角点集合中,对于获取的其余角点,将计算其与角点集合中所有角点的距离li,i为变量,判断与角点集合中的所有角点是否相似,若li<r,并与其余角点不相似,将该角点添加到角点集合中;该交点w对应两条臂,第一条臂为其与c边缘线的终点的连线,第二条臂为其与d边缘线的终点的连线,c边缘线的终点为c边缘线中d1和d2中较大的对应端点,d边缘线的终点为d边缘线中d3和d4中较大的对应端点;同样的方式处理种子边缘线组集合中的其余任两条边缘线,获取所有的角点,根据种子边缘线集合扩展每个角点的两臂,得到最终的角点集合,实现角点提取。

根据种子边缘线集合扩展每个角点的两臂的具体方式为:

遍历种子边缘线集合的所有边缘线,对于每个角点,计算其到当前种子边缘线的距离,如果该距离小于给定的阈值,则判断该种子边缘线是否可以扩展当前角点的两臂,首先判断该种子边缘线是否可以扩展当前角点的臂1,具体方式为:

c1、计算当前角点到该种子边缘线的起点和终点的距离,记作dist1和dist2,判断当前角点是否在该种子边缘线的两端点之间;

c2、若当前角点在该种子边缘线的两端点之间,将当前角点到该种子边缘线的起点所在的线段记作m,线段m的起点为当前角点,终点为该种子边缘线的起点,当前角点的臂1所在的线段记作n,线段n的起点为当前角点,计算线段m的角度angle1和线段n的角度angle2,判断angle1和angle2的差的绝对值是否小于给定的角度阈值;

c3、若angle1和angle2的差的绝对值小于给定的角度阈值,则计算线m的终点到当前角点的距离rm,计算线段n的长度rn,判断rm与rn的差值是否小于给定的长度差阈值;

c4、若rm与rn的差值小于给定的长度差阈值,计算线段n的终点到当前种子边缘线的距离,若该距离小于给定的点到线的距离阈值且dist1大于rn,则当前种子边缘线可以扩展当前角点的臂1,当前角点的扩展后的臂1的终点为该种子边缘线的起点,扩展后的臂1的长度为dist1;

c5、若c2到c4的任一条件不满足,则表明当前种子边缘线不可以扩展当前角点的臂1,则采用同样的方法判断当前种子边缘线是否可以扩展当前角点的臂2,如果可以扩展,扩展后的臂2的终点为该种子边缘线的起点,扩展后的臂2的长度为dist1,如果不能扩展,直接执行下一步骤;

c6、将c2中的线段m的终点更新为当前种子边缘线的终点,线段n更新为当前角点的臂2所在的线段,线段n的起点为当前角点,dist1更新为dist2,采用同样的方法再次判断当前种子边缘线是否可以扩展当前角点的臂1和臂2,实现当前角点两臂的扩展;

c7、此时,若不满足c1中的条件,判断dist1是否小于等于dist2;

c8、若dist1小于等于dist2,将c2中的线段m的起点更新为当前种子边

缘线的起点,终点更新为当前边缘线的终点,线段n为当前角点的臂1或臂2所在的线段,采用同样的方法判断当前种子边缘线是否可以扩展当前角点的臂1和臂2,实现当前角点两臂的扩展;

c9、若dist1大于dist2,将c2中的线段m的起点更新为当前种子边缘线的终点,终点更新为当前边缘线的起点,线段n为当前角点的臂1或臂2所在的线段,dist1更新为dist2,采用同样的方法判断当前种子边缘线是否可以扩展当前角点的臂1和臂2,实现当前角点两臂的扩展。

s6中对提取的角点配对的具体方式为:c1、对角点集合中的所有角点进行两两配对,若配对的两个角点的坐标不同,则继续判断两个角点之间是否共享一个臂,将一个角点的两臂标记为arm11和arm12,另一个角点的两臂记为arm21和arm22,先判断arm11和arm21是否为两个角点的同一个臂;c2、判断arm11和arm21是同一臂的方式为:若两个角点之间的距离小于arm11和arm21的最小值的四分之一,则arm11和arm21不是同一臂;若两个角点之间的距离大于arm11和arm21的最小值的四分之一,先计算arm11与两个角点连线的角度差的绝对值x1,arm21与两个角点连线的角度差的绝对值x2,x1和x2的取值范围是[0,180],给定角度相似阈值f,若x1和x2均小于角度相似阈值f,给定角点间距离阈值u和长度比例阈值ratio,若arm11和arm21的长度和大于等于两个角点距离的ratio倍,并大于等于两个角点的距离与u的差值,则判定arm11和arm21是同一臂,角点配对成功;否则,采用同样的方法判断两个角点的其余任两个臂是否是同一臂,若均不是则角点配对失败,否则角点配对成功;同样的方式对其余的角点两两配对,获取所有配对成功的角点组合,每个角点组合的同一臂为共享臂,另两个臂为打开臂,计算每一个角点组合中两个打开臂与共享臂之间的夹角u1和u2,夹角u1和u2的取值范围是[0,180],将夹角u1或u2小于弯曲度阈值b的角点组合剔除;对剩余的角点组合,判断其两个打开臂是否在共享臂的同一侧,计算该角点组合的共享臂的中心点,以中心点为起点,计算共享臂的单位法向量,计算第一个角点的打开臂的终点与中心点的连线所在的向量v1和第二个角点的打开臂的终点与中心点的连线所在的向量v2,如果向量v1和v2与共享臂的单位法向量的内积一正一负,则两个打开臂不在共享臂的同一侧,将两个打开臂不在共享臂的同一侧的角点组合剔除,最后根据当前配对的角点组合确定一个四边形;同样的方式处理所有的角点组合,获取所有的四边形。

判断两个角点是否相似的具体方式为:分别计算一个角点的每一个打开臂的角度与另一个角点的每一个打开臂的角度的差值的绝对值a11、a12、a21、a22,角度的差值的绝对值的取值范围为[0,180],选取min(a11,a12),min(a21,a22),对于已经给定的角度相似阈值f,若max(min(a11,a12),min(a21,a22))<f,则两个角点相似。

两个角点相似表示两个角点各自对应的打开臂近似平行,举例说明:若两个角点分别包含一条横向打开臂和一条竖向打开臂,则两个角点的横向打开臂是近似平行,那角度差很小,两个竖向打开臂近似平行,角度差也很小,故min(a11,a12)和min(a21,a22)的最小值也应该小于给定的相似角度阈值,否则两个角点不相似。

s7中根据获取的四边形和上表面分割图像确定立方物体的上表面和整体轮廓的具体方式为:c1、先对获取的四边形进行处理,若进行匹配的四边形的两个臂的终点距离小于给定的距离比例阈值倍,该四边形不符合,处理下一个四边形,获取所有符合条件的四边形,并获取每个四边形的轮廓和外接矩形,根据轮廓坐标点计算其凸包;

c2、根据上表面分割图像进行轮廓检测,获取所有的轮廓,根据轮廓坐标点计算其凸包,并获取包含每个轮廓的最小的旋转矩形以及包含旋转矩形的外接矩形,计算每个轮廓的面积,判断轮廓的面积是否大于给定的面积阈值;

c3、若轮廓的面积大于面积阈值,将当前轮廓与符合条件的四边形进行匹配,分别计算进行匹配的四边形的两个角点到当前轮廓的凸包的最小距离h1和h2,判断进行匹配的四边形的两个角点是否在进行匹配的四边形的凸包的外部以及h1和h2是否小于等于给定的距离阈值;

c4、若进行匹配的四边形的两个角点在进行匹配的四边形的凸包的外部且h1和h2均小于等于该距离阈值,判断当前轮廓外的旋转矩形的中心点是否在进行匹配的四边形的凸包内部;

c5、若当前轮廓外的旋转矩形的中心点位于进行匹配的四边形的凸包内部,计算其到进行匹配的四边形凸包的最小距离的绝对值,满足该值小于等于旋转矩形的长和宽,且中心点位于进行匹配的四边形的任一个臂的下侧的条件,计算进行匹配的四边形的外接矩形与当前轮廓的外接矩形的重叠面积,若该重叠面积大于给定的比例阈值,则当前轮廓与进行匹配的四边形初步匹配成功,进行匹配的四边形记作初步匹配四边形;

c6、将当前轮廓的旋转矩形的中心点到初步匹配四边形的三个臂的距离进行归一化处理,归一化处理后的值在理论范围内,且h1与h2的和小于等于给定阈值,将该初步匹配四边形记作有效四边形;

c7、判断有效四边形的两个打开臂是否朝下,将两个打开臂朝下的有效四边形记作种子四边形;若获取下一个种子四边形,则计算该种子四边形的两个角点到其轮廓的最小距离之和是否小于上一个种子四边形的两个角点到其轮廓的最小距离之和,若小于则用当前种子四边形替换上一个种子四边形,否则剔除当前种子四边形,继续处理直至获取当前轮廓的最终的种子四边形;

c8、判断当前轮廓的最终的种子四边形是否与有效四边形存在共享角点;

c9、若存在共享角点,判断有效四边形的共享臂和打开臂所在线段与种子四边形的共享臂所在线段是否存在重叠,若存在重叠,判断有效四边形的共享臂和打开臂所在线段与种子四边形的打开臂所在线段的重叠数目是否大于等于1,若满足则获取以种子四边形的三条臂为上表面的边,有效四边形的除重叠臂以外的臂为侧垂面的边的立方物体轮廓,获取所有的立方物体轮廓,记作立方物体轮廓集合;

c10、根据立方物体轮廓的每条边的端点获取立方物体轮廓的所有点坐标,立方物体轮廓以种子四边形为上表面;

c11、遍历立方物体轮廓集合,计算每个立方物体轮廓中心点的y坐标p.y和其上表面的中心点的y坐标t.y,计算每个立方物体轮廓的面积p.area和其上表面的面积t.area,如果t.y>p.y或t.area>p.area,则剔除该立方物体轮廓,获取最终的立方物体轮廓集合。

s8中获取上表面的轮廓边缘线的具体方式为:c1、遍历所有检测到的每个立方物体的上表面的所有像素点,根据图像坐标系和世界坐标系间的变换关系获取上表面的所有像素点在三维空间的世界坐标点;c2、遍历当前上表面的所有世界坐标点,给定点数阈值,判断所有的点数是否大于给定的点数阈值;c3、若点数大于点数阈值,计算所有点的均值点并进行归一化处理,每个立方物体的上表面的所有坐标点在三维空间中位于同一平面,均值点位于该平面上,计算均值点所在的三维空间的平面的法向量,根据法向量和均值点获取其初次拟合三维平面方程;c4、计算上表面的所有世界坐标点到初次拟合三维平面的距离,给定距离阈值,剔除距离大于给定距离阈值的所有点,获取理想点集合,根据理想点集合再次进行拟合,获取二次拟合三维平面方程;c5、重复上述步骤进行多次重复拟合,每次拟合后计算理想点集合的所有点到拟合三维平面的距离,剔除距离大于给定距离阈值的所有点,更新理想点集合,记作上理想点集合;c6、获取当前上表面的上理想点集合的所有世界坐标点对应在二维平面的平面坐标点,并根据其进行轮廓检测,获取所有轮廓,计算每个轮廓的外接矩形与当前上表面的外接矩形的重叠面积,寻找重叠面积最大且大于给定的阈值的轮廓,该轮廓即为上表面最终的轮廓,根据该轮廓计算上表面的凸包,根据其凸包获取其对应的拟合多边形,获取上表面的拟合多边形的所有边缘线并按照从长到短排序,这些边缘线即为上表面的轮廓边缘线。

s9中根据上表面的轮廓边缘线确定上表面四边形的具体方式为:给定平行角度差阈值j,判断任两条轮廓边缘线的角度差是否小于j,若满足该条件,则当前两条轮廓边缘线为同一组,将所有轮廓边缘线分组,若若分组后的总组数大于等于2,计算每组的轮廓边缘线的总长度并从大到小排序,将总长度最大的两个组别记作组1和组2,则组1包含上表面四边形的一组近似平行的边,组2包含上表面四边形的另一组近似平行的边,若分组后的总组数小于2,处理下一上表面;分别计算组1和组2中任两条轮廓边缘线的距离差,给定平行距离差阈值,分别将组1和组2中距离差小于平行距离差阈值的轮廓边缘线划分为同一组,若组1中划分后的总组数大于等于2,计算组1中每组的边缘线的总长度并从大到小排序,将总长度最大的两个组别记作组11和组12,若组2中划分后的总组数大于等于2,计算组2中每组的边缘线的总长度并从大到小排序,将总长度最大的两个组别记作组21和组22,若组1或组2划分后的总组数小于2,处理下一上表面;遍历上表面轮廓的所有像素点,分别计算每个像素点到到组11、组12、组21和组22的所有轮廓边缘线的距离,获取每个组距离最小且小于给定阈值的轮廓边缘线,即为上表面的四条边。

s10中计算立方物体的体积的具体方式为:对上表面四边形的任一条边,记作边1,与边1近似平行的边记作边2,计算边1所有边缘点到边2所在垂直面的距离,同时计算边2所有边缘点到边1所在垂直面的距离,计算所有距离的平均值作为当前上表面对应的立方物体的长;对上表面四边形的另外两条近似平行边分别记作边3和边4,计算边3所有边缘点到边4所在垂直面的距离,同时计算边4所有边缘点到边3所在垂直面的距离,计算所有距离的平均值作为当前上表面对应的立方物体的宽;计算上表面四边形的所有点到地平面的拟合三维平面的距离并求均值,该均值即为立方物体的高,根据立方物体的长宽高计算立方物体的体积。

近似平行的范围是平行角度差阈值,边1和边2的角度差值小于给定的平行角度差阈值,则这两条边近似平行;如果边1和边2完全平行,两条边的角度应该相等,近似平行就是两条边的角度差小于给的平行角度差阈值。由于立方物体的每个面投影后原本平行的两条边可能并不完全平行,该方式帮助提高算法的稳定性。获取地平面的拟合三维平面的方式为:定义与梯度图大小相同的地平面图像,设定像素点的初始值为0;遍历水平面的二值图和上表面分割图像,将在水平面的二值图中的像素点值为255且在上表面分割图像中的像素点值为0的像素点对应在地平面图像上的像素点值更新为255,获取地平面图像;计算地平面图像上所有像素点值为255的像素点在三维空间的世界坐标点,计算所有像素点的均值点并进行归一化处理,地平面图像的所有坐标点以及均值点在三维空间中在同一平面上,计算其所在的三维空间的平面的法向量,根据地平面的均值点和法向量获取地平面的拟合三维平面方程,拟合后计算地平面图像上像素点值为255的像素点到拟合三维平面方程的距离,剔除距离大于给定阈值的像素点,获取属于地平面点的理想点集合,根据理想点集合再次拟合地平面的三维平面方程,计算地平面点的理想点集合的所有像素点到拟合三维平面方程的距离,剔除距离大于给定阈值的像素点,更新地平面点的理想点集合,多次重复拟合剔除噪声点后获取地平面的最终的拟合三维平面方程。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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