发明内容
为解决现有技术中对立方物体状包裹、货物、货柜等立方物体的体积测量局限和耗时的问题,本发明提出一种基于深度图像的立方物体体积计算方法。
本发明的技术方案是这样实现的:
一种基于深度图像的剔除噪声的立方物体的体积计算方法,包括:
S1、获取立方物体的深度图像,根据深度图像分别获取与其大小相同的X方向和Y方向的梯度图;S2、根据梯度图对其中的像素点分成水平面、左垂面和右垂面三类,获取深度图像的边缘点图;S3、根据分类结果、梯度图和边缘点图获取深度图像中立方物体的上表面、左垂面和右垂面的分割图像;S4、对边缘点图进行边缘线检测,将检测到的所有边缘线进行聚类与合并,获取共线边缘线组集合;S5、根据共线边缘线组集合的每组最长的边缘线提取角点;S6、对提取的角点进行配对;S7、根据获取的四边形和上表面分割图像确定立方物体的上表面和整体轮廓,根据左垂面的分割图像和右垂直分割图像获取每个上表面四边形对应的左右垂面,实现立方物体定位;S8、根据立方物体的上表面、左垂面和右垂面拟合其在三维空间的平面,通过多次重复拟合剔除每个面上的噪声点,获取每个面对应的理想点集合;S9、根据每个面的理想点集合获取每个面的轮廓边界和角点,根据其角点在三维空间中的坐标获取立方物体的长宽高,计算立方物体的体积。
优选的是,根据分类结果、梯度图和边缘点图获取深度图像中立方物体的上表面、左垂面和右垂面的分割图像的具体方式为:根据分类结果获取与梯度图大小相同的水平面、左垂面和右垂面的二值图,定义与梯度图大小相同的上表面分割图像,设定像素点的初始值为0;从下到上遍历水平面的二值图中第一列的像素点,根据深度图获取每个像素点的可信度值,给定可信度阈值,若该像素点的可信度值小于给定的可信度阈值,则该像素点的状态为未知,处理下一像素点;否则,若对应的像素点值为255,则该像素点的状态为水平,若对应的像素点为0,则该像素点的状态为垂直,若像素点值为0的像素点的数目大于给定的高度阈值,则将其后出现的像素点值为255的像素点对应在上表面分割图像上并将其像素值更新为255,记录每一次像素点状态发生转变的像素点所在的行数,遍历完第一列所有行的像素点后,将从记录的行数起到第1行的第一列所有像素点对应在上表面分割图像上的位置的像素值置为0,同样的方式遍历完平行面图像的所有行列,获取初始的上表面分割图像,对获取的初始的上表面分割图像进行修补,更新上表面分割图像;将边缘点图中的边缘点分别一一对应在更新后的上表面分割图像、左垂面的二值图和右垂面的二值图中,将更新后的上表面分割图像中水平状态的非边缘点的像素点值更新为0,将左垂面的二值图中非边缘点的像素值为255的像素点值更新为0,将右垂面的二值图中非边缘点的像素值为255的像素点值更新为0,获取最终的上表面分割图像、左垂面的二值图和右垂面的二值图,将左垂面的二值图和右垂面的二值图分别记作左垂面的分割图像和右垂面的分割图像。
优选的是,对边缘点图进行边缘线检测,将检测到的所有边缘线进行聚类与合并,获取共线边缘线组集合的具体方式为:对边缘点图进行边缘线检测,获取所有边缘线并按照长到短排序成边缘线集合,定义一个空的共线边缘线组集合,共线边缘线组集合包含多组边缘线,每组内的边缘线是共线的,两组间边缘线是不共线的,首先将最长的边缘线加入到共线边缘线组集合的一组中,对于边缘线集合中的每一条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的角点组合剔除;对剩余的角点组合,判断其两个打开臂是否在共享臂的同一侧,将两个打开臂不在共享臂的同一侧的角点组合剔除,最后根据当前配对的角点组合确定一个四边形;同样的方式处理所有的角点组合,获取所有的四边形。
优选的是,根据获取的四边形和上表面分割图像确定立方物体的上表面和整体轮廓的具体方式为:
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,则剔除该立方物体轮廓,获取最终的立方物体轮廓集合。
优选的是,根据左垂面的分割图像和右垂直分割图像获取每个上表面四边形对应的左右垂直面,实现立方物体定位的具体方式为:遍历所有立方物体轮廓集合,根据左垂面的分割图像获取左垂直面所有的轮廓及其对应的旋转矩形和外接矩形,判断旋转矩形的中心点的y坐标是否大于等于上表面四边形中心点的y坐标;若满足前一条件,判断上表面四边形对应的立方物体轮廓面积和外接矩形的重叠面积占立方物体轮廓面积的比例是否大于等于给定的面积比例阈值;若大于等于面积比例阈值,寻找满足上述条件的所有左垂面轮廓中面积最大的轮廓即为当前立方物体的左垂直面轮廓;
根据右垂直分割图像获取右垂直面所有轮廓及其对应的旋转矩形和外接矩形,对右垂直分割图像的所有轮廓的处理方式与左垂直面的所有轮廓的处理方式一致,以此获取每个立方物体上表面对应的左垂直面和右垂直面,每组上表面、左垂直面和右垂直面构成一个立方物体,实现立方物体检测。
优选的是,S8中根据立方体的上表面、左垂面和右垂面拟合其在三维空间的平面,通过多次重复拟合剔除每个面上的噪声点,获取每个面对应的理想点集合的具体方式为:
C1、遍历所有检测到的每个立方物体的上表面的所有像素点,根据图像坐标系和世界坐标系间的变换关系获取上表面的所有像素点在三维空间的世界坐标点;
C2、遍历当前上表面的所有世界坐标点,给定点数阈值,判断所有的点数是否大于给定的点数阈值;
C3、若点数大于点数阈值,计算所有点的均值点并进行归一化处理,每个立方物体的上表面的所有坐标点在三维空间中位于同一平面,均值点位于该平面上,计算均值点所在的三维空间的平面的法向量,根据法向量和均值点获取其初次拟合三维平面方程;
C4、计算上表面的所有世界坐标点到初次拟合三维平面的距离,给定距离阈值,剔除距离大于给定距离阈值的所有点,获取理想点集合,根据理想点集合再次进行拟合,获取二次拟合三维平面方程;
C5、重复上述步骤进行多次重复拟合,每次拟合后计算理想点集合的所有点到拟合三维平面的距离,剔除距离大于给定距离阈值的所有点,更新理想点集合,记作上理想点集合;
C6、对立方物体的左垂面和右垂面采用与上表面相同的方式获取其对应的左垂面和右垂面在三维空间的拟合三维平面方程及其对应左垂面理想点集合和右垂面理想点集合,记作左理想点集合和右理想点集合。
优选的是,S9中根据每个面的理想点集合获取每个面的轮廓边界和角点,根据其角点在三维空间中的坐标获取立方体的长宽高,计算立方物体体积的具体方式为:获取上理想点集合、左理想点集合和右理想点集合的所有世界坐标点对应在二维平面的平面坐标点,并根据其进行轮廓检测,获取所有轮廓,计算每个轮廓的外接矩形与上理想点集合对应的上表面的外接矩形的重叠面积,寻找重叠面积最大且大于给定的阈值的轮廓,该轮廓即为上表面最终的轮廓,根据该轮廓计算上表面的凸包,根据其凸包获取其对应的拟合多边形,获取上表面的拟合多边形的所有边缘线,这些边缘线即为上表面的轮廓边界,采用同样的方式获取左垂面和右垂面的轮廓边界;根据上表面的轮廓边界获取其4个角点,并获取其对应在三维空间的4个角点的世界坐标,根据世界坐标计算上表面的长和宽,即为当前立方物体的长和宽;选取左垂面和右垂面中较大的垂面,根据该垂面的轮廓边界获取其4个角点,并获取其对应在三维空间的4个角点的世界坐标,根据世界坐标计算该垂面的高度,即为当前立方体的高度,根据立方体的长宽高计算立方物体体积。
优选的是,根据种子边缘线集合扩展每个角点的两臂的具体方式为:
遍历种子边缘线集合的所有边缘线,对于每个角点,计算其到当前种子边
缘线的距离,如果该距离小于给定的阈值,则判断该种子边缘线是否可以扩展当前角点的两臂,首先判断该种子边缘线是否可以扩展当前角点的臂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,实现当前角点两臂的扩展。
本发明的有益效果为:本发明的基于深度图像的剔除噪声的立方物体的体积计算方法,在通过分割图像快速区分出立方物体的表面的基础上,对边缘点图进行边缘线检测,将检测到的所有边缘线进行聚类与合并,获取所有共线的边缘线组别,每个组别内边缘线共线,选取其最长边缘线表示每组边缘线,在计算时每组边缘线也只使用其最长边缘线,减少计算量,提高检测的稳定性;再利用聚类合并后的边缘线间的交点提取角点并进行配对,角点配对验证两个角点之间是否存在共享臂,角点的两个打开臂是否在其共享臂的同一侧以及每个角点间的夹角是否大于给定的角度阈值,根据角点配对结果实现四边形检测,然后通过检测上表面分割图像获取所有的上表面轮廓,并将上表面轮廓与所有检测到的四边形进行匹配,获取立方体上表面和立方体整体轮廓,再结合左垂面和右垂面分割图像获取所有左垂面轮廓和右垂面轮廓,再根据其和立方体整体轮廓确定每个上表面对应的左垂面和右垂面,准确实现立方物体的定位。根据立方物体的三个面拟合其在三维空间的平面,每次拟合后剔除到其拟合三维平面距离较大的点,经过多次重复拟合剔除每个面上的噪声点,增加拟合的精确性,提高算法的稳定性;根据拟合后的每个面对应的理想点集合,获取每个面的轮廓和角点,再获取立方物体的长宽高,精确计算立方物体的体积。
本发明的立方物体体积计算方法应用在包裹、货物、货柜等立方物体的体积测量中,避免比对传输带装货前和装货后的深度图像,而是直接识别立方物体状立方物体,获取对应的长宽高计算立方物体的体积,解决了包裹体积测量局限和耗时的问题,帮助物流行业提高包裹分拣效率,具有重要的实际应用意义。本发明的基于深度图像的剔除噪声的立方物体的体积计算方法,也可在图像识别领域应用。
具体实施方式
下面对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例:一种基于深度图像的立方物体体积计算方法,包括:S1、获取立方物体的深度图像,根据深度图像分别获取与其大小相同的X方向和Y方向的梯度图;S2、根据梯度图对其中的像素点进行分类,获取深度图像的边缘点图;S3、根据分类结果、梯度图和边缘点图获取深度图像中立方物体的上表面、左垂面和右垂面的分割图像;S4、对边缘点图进行边缘线检测,将检测到的所有边缘线进行聚类与合并,获取共线边缘线组集合;S5、根据共线边缘线集合的每组最长的边缘线提取角点;S6、对提取的角点进行配;S7、根据获取的四边形和上表面分割图像确定立方物体的上表面和整体轮廓,根据左垂面的分割图像和右垂直分割图像获取每个上表面四边形对应的左右垂面,实现立方物体定位;S8、根据立方物体的上表面、左垂面和右垂面拟合其在三维空间的平面,通过多次重复拟合剔除每个面上的噪声点,获取每个面对应的理想点集合;S9、根据每个面的理想点集合获取每个面的轮廓边界和角点,根据其角点在三维空间中的坐标获取立方物体的长宽高,计算立方物体的体积。
像素点分类方法适用于任意场景的任意物体,实际应用在立方物体定位和体积测量时,立方物体在图像中至少包含可见的上表面和一个垂直面,目标所在的平面是深度图像中最低的平面或者直接在地面上,便于更加准确地实现立方物体定位和提高体积计算精度。
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的DY(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中较大的对应端点;同样的方式处理种子边缘线组集合中的其余任两条边缘线,获取所有的角点,根据种子边缘线集合扩展每个角点的两臂,得到最终的角点集合,实现角点提取。
判断两个角点是否相似的具体方式为:分别计算一个角点的每一个打开臂的角度与另一个角点的每一个打开臂的角度的差值的绝对值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)的最小值也应该小于给定的相似角度阈值,否则两个角点不相似。
根据种子边缘线集合扩展每个角点的两臂的具体方式为:遍历种子边缘线集合的所有边缘线,对于每个角点,计算其到当前种子边缘线的距离,如果该距离小于给定的阈值,则判断该种子边缘线是否可以扩展当前角点的两臂,首先判断该种子边缘线是否可以扩展当前角点的臂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与共享臂的单位法向量的内积一正一负,则两个打开臂不在共享臂的同一侧,将两个打开臂不在共享臂的同一侧的角点组合剔除,最后根据当前配对的角点组合确定一个四边形;同样的方式处理所有的角点组合,获取所有的四边形。
S7中根据获取的四边形和上表面分割图像确定立方物体的上表面和整体轮廓,再根据左垂面的分割图像和右垂直分割图像获取每个上表面四边形对应的左右垂直面,实现立方物体定位。确定立方物体的上表面和整体轮廓具体方式为:C 1、先对获取的四边形进行处理,若进行匹配的四边形的两个臂的终点距离小于其两个角点距离的0.8倍,该四边形不符合,处理下一个四边形,获取所有符合条件的四边形,并获取每个四边形的轮廓和外接矩形,根据轮廓坐标点计算其凸包;C2、根据上表面分割图像进行轮廓检测,获取所有的轮廓,根据轮廓坐标点计算其凸包,并获取包含每个轮廓的最小的旋转矩形以及包含旋转矩形的外接矩形,计算每个轮廓的面积,判断轮廓的面积是否大于给定的面积阈值,若轮廓的面积小于给定的面积阈值,则处理下一个轮廓;C3、若轮廓的面积大于给定的面积阈值,将当前轮廓与符合条件的四边形进行匹配,分别计算进行匹配的四边形的两个角点到当前轮廓的凸包的最小距离h1和h2,判断进行匹配的四边形的两个角点是否在进行匹配的四边形的凸包的外部以及h1和h2是否小于等于给定的距离阈值,若h1和h2中的任一个大于给定的距离阈值,则表明存在角点在该轮廓的内侧并在靠近其中心点位置处,进行下一个四边形匹配;C4、若进行匹配的四边形的两个角点在进行匹配的四边形的凸包的外部且h1和h2均小于等于该距离阈值,正在进行匹配的四边形的两个角点位于当前轮廓的外侧,判断当前轮廓外的旋转矩形的中心点是否在进行匹配的四边形的凸包内部,如果不在内部则进行下一个四边形匹配;C5、若当前轮廓外的旋转矩形的中心点位于进行匹配的四边形的凸包内部,计算其到进行匹配的四边形轮廓的最小距离的绝对值,满足该值小于等于旋转矩形的长和宽,且中心点位于进行匹配的四边形的任一个臂的下侧的条件,计算进行匹配的四边形的外接矩形与当前轮廓的外接矩形的重叠面积,若该重叠面积大于给定的比例阈值,则当前轮廓与进行匹配的四边形初步匹配成功,进行匹配的四边形记作初步匹配四边形;C6、将当前轮廓的旋转矩形的中心点到初步匹配四边形的三个臂的距离进行归一化处理,归一化处理后的值在理论范围内,且h1与h2 的和小于等于给定阈值,将该初步匹配四边形记作有效四边形;C7、判断有效四边形的两个打开臂是否朝下,将两个打开臂朝下的有效四边形记作种子四边形,判断的方式:分别以有效四边形的两个角点为起点,水平向右为X轴,在X轴上的线段角度为0度,按照顺时针转动线段角度不断增大,角度的取值范围为[0,360],利用该种定义规则计算两个打开臂的角度,若两个角度均小于15度或大于165度,则表明有效四边形的两个打开臂朝上,则处理下一个;否则,如果该有效四边形的两个打开臂的终点位于两个角点的上方,则处理下一个,否则,将两个打开臂朝下的有效四边形记作种子四边形;若获取满足上述条件的下一个种子四边形,则计算当前种子四边形的两个角点到其凸包的最小距离之和是否小于上一个种子四边形的两个角点到其凸包的最小距离之和,如果小于则用当前种子四边形替换上一个种子四边形,否则剔除当前种子四边形,再继续处理,获取当前轮廓的最终的种子四边形;C8、判断当前轮廓的最终的种子四边形是否与有效四边形存在共享角点,判断方式为,在与当前轮廓匹配的种子四边形和有效四边形中,每个轮廓只有一个种子四边形但可能存在多个有效四边形,计算最终的种子四边形的两个角点分别到有效四边形的两个角点的距离,若四个距离均大于给定的阈值,则表明种子四边形和有效四边形不存在共享角点,处理下一有效四边形;C9、若存在共享角点,判断有效四边形的共享臂和打开臂所在线段与种子四边形的共享臂所在线段是否存在重叠,若存在重叠,判断有效四边形的共享臂和打开臂所在线段与种子四边形的打开臂所在线段的重叠数目是否大于等于1,若满足则获取以种子四边形的三条臂为上表面的边,有效四边形的除重叠臂以外的臂为侧垂面的边的立方物体轮廓,获取所有的立方物体轮廓,记作立方物体轮廓集合,每个立方物体轮廓是一个多边形;C10、根据立方物体轮廓的每条边的端点获取立方物体轮廓的所有点坐标,立方物体轮廓以种子四边形为上表面;C11、遍历立方物体轮廓集合,计算每个立方物体轮廓中心点的y坐标P.y和其上表面的中心点的y坐标t.y,计算每个立方物体轮廓的面积P.area和其上表面的面积t.area,如果t.y>P.y或t.area>P.area,则剔除该立方物体轮廓,获取最终的立方物体轮廓集合。0.8是给定的距离比例阈值。
判断两条线段重叠的方式为:给定线段E和线段F,E的长度L1和F的长度H1;计算线段E和线段F间的角度差,如果角度差大于给定的阈值,则线段E和线段F不重叠;否则,计算E的起点到F的起点和终点的距离R1和R2,E的终点到F的起点和终点的距离R3和R4,如果max(max(R1, R2), max(R3, R4)) >= (max(L1, H1) + min(L1, H1) / 2),则线段E和线段F不重叠;否则,如果max(R1, R2) <H1,线段E的起点到线段F的距离小于给定的阈值,如果max(R3, R4) <H1,线段E的终点到线段F的距离小于给定的阈值,如果max(R1, R3) <L1,线段F的起点到线段E的距离小于给定的阈值,如果max(R2, R4) <L1,线段F的终点到线段E的距离小于给定的阈值,则线段E和线段F重叠。
S7中根据左垂面的分割图像和右垂直分割图像获取每个上表面四边形对应的左右垂面,实现立方物体定位的具体方式为:遍历所有立方物体轮廓集合,根据左垂面的分割图像获取左垂直面所有的轮廓及其对应的旋转矩形和外接矩形,判断旋转矩形的中心点的y坐标是否大于等于上表面四边形中心点的y坐标,若旋转矩形的中心点的y坐标小于上表面四边形中心点的y坐标,处理下一轮廓;若旋转矩形的中心点的y坐标大于等于上表面四边形中心点的y坐标,判断上表面四边形对应的立方物体轮廓面积和外接矩形的重叠面积占立方物体轮廓面积的比例是否大于等于0.6;若大于等于0.6,寻找满足上述条件的所有左垂面轮廓中面积最大的轮廓即为当前立方物体的左垂直面轮廓;根据右垂直分割图像获取右垂直面所有轮廓及其对应的旋转矩形和外接矩形,对右垂直分割图像的所有轮廓的处理方式与左垂直面的所有轮廓的处理方式一致,以此获取每个立方物体上表面对应的左垂直面和右垂直面,每组上表面、左垂直面和右垂直面构成一个立方物体,实现立方物体检测。0.6是给定的面积比例阈值。
S8中根据立方体的上表面、左垂面和右垂面拟合其在三维空间的平面,通过多次重复拟合剔除每个面上的噪声点,获取每个面对应的理想点集合的具体方式为:C1、遍历所有检测到的每个立方物体的上表面的所有像素点,根据图像坐标系和世界坐标系间的变换关系获取上表面的所有像素点在三维空间的世界坐标点;C2、遍历当前上表面的所有世界坐标点,给定点数阈值,判断所有的点数是否大于给定的点数阈值;C3、若点数大于点数阈值,计算所有点的均值点并进行归一化处理,每个立方物体的上表面的所有坐标点在三维空间中位于同一平面,均值点位于该平面上,计算均值点所在的三维空间的平面的法向量,根据法向量和均值点获取其拟合三维平面方程;C4、计算上表面的所有世界坐标点到初次拟合三维平面的距离,给定距离阈值,剔除距离大于给定距离阈值的所有点,获取理想点集合,根据理想点集合再次进行拟合,获取二次拟合三维平面方程;C5、重复上述步骤进行多次重复拟合,每次拟合后计算理想点集合的所有点到拟合三维平面的距离,剔除距离大于给定距离阈值的所有点,更新理想点集合,记作上理想点集合;C6、对立方物体的左垂面和右垂面采用与上表面相同的方式获取其对应的左垂面和右垂面在三维空间的拟合三维平面方程及其对应左垂面理想点集合和右垂面理想点集合,记作左理想点集合和右理想点集合。C5中拟合的次数可根据实际情况确定,多次重复拟合后获取当前上表面最终的拟合三维平面方程和对应的上表面理想点集合。
S9中根据每个面的理想点集合获取每个面的轮廓边界和角点,根据其角点在三维空间中的坐标获取立方体的长宽高,计算立方物体体积的具体方式为:获取上理想点集合、左理想点集合和右理想点集合的所有世界坐标点对应在二维平面的平面坐标点,并根据其进行轮廓检测,获取所有轮廓,计算每个轮廓的外接矩形与上理想点集合对应的上表面的外接矩形的重叠面积,寻找重叠面积最大且大于给定的阈值的轮廓,该轮廓即为上表面最终的轮廓,根据该轮廓计算上表面的凸包,根据其凸包获取其对应的拟合多边形,获取上表面的拟合多边形的所有边缘线,这些边缘线即为上表面的轮廓边界,采用同样的方式获取上表面左垂面和右垂面的轮廓边界;根据上表面的轮廓边界获取其4个角点,并获取其对应在三维空间的4个角点的世界坐标,世界坐标即为其在实际空间中的坐标,根据世界坐标计算上表面的长和宽,即为当前立方物体的长和宽;选取左垂面和右垂面中较大的垂面,根据该垂面的轮廓边界获取其4个角点,并获取其对应在三维空间的4个角点的世界坐标,世界坐标即为其在实际空间中的坐标,根据世界坐标计算该垂面的高度,即为当前立方体的高度,根据立方体的长宽高计算立方物体体积。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。