本发明属于定位技术领域,尤其是涉及一种面向视觉伺服的高精度高速定位标签和定位方法。
背景技术:
随着智能制造2025计划的推进,越来越多的工业场景和岗位实现了机器换人,例如仓储出入库、物料搬运、加工装配等。机器人在移动以及生产作业过程中均需要对自身以及作业对象进行高精度地快速位姿估计,以满足现代工厂高精度、高品质的生产作业要求。基于视觉的定位方法一般是借助目标物体上的显著特征或者人工布置的显著特征实现的,首先使用机器视觉的相关方法实现对特征点的准确检测,然后利用视觉成像原理和特征点之间的物理尺寸计算当前相机的位姿,一般采用最优化的方法实现位姿的最优估计。在工业生产中,目标物体一般不具备可以用于位姿估计的显著特征。因此,在实际的应用中位姿估计一般采用人工标记点,由此也诞生了多种人工标记点,其中二维码是目前应用最广泛的一种。
二维码是一种在一维条形码基础上扩展的二位可读可编码的标签,使用黑白矩形实现二进制编码,具备强大的编码能力,可携带大量的信息。在设计之初,为便于视觉扫描和检测,二维码加入了很多显著特征。以qrcode为例,在方形二维码的三个顶点上设置了特殊的黑白矩形相互嵌套的标记,宽度按照1:3:1设置,方便视觉算法快速、鲁棒的检索。目前主流的基于二维码的定位方法均是通过寻找方形二维码顶点的特殊标记点实现的。二维码定位的优点是方便,应用广泛,材料容易获取,同时具备定位和编码能力。缺点也很明显,首先二维码顶点处的特殊人工标记是为便于视觉算法鲁棒检测设计的,位置精度不高,内部的黑白矩形因为编码需求为乱序状态,无法用于定位,导致二维码的定位精度不高;其次二维码内部黑白矩形的检测和解码比较耗时,导致二维码定位的速度受到一定的限制,不能满足特定场景下的实时视觉伺服需求;再次二维码用于检测的顶点特征仅占二维码很小的一部分,当二维码在相机视野中比较小时,二维码检测失败的频率较高。
技术实现要素:
有鉴于此,本发明旨在提出一种面向视觉伺服的高精度高速定位标签和定位方法,以解决现有技术中定位标签的定位精度不高、耗时长、不能满足特定场景下的实时视觉伺服需求以及检测失败高的问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种面向视觉伺服的高精度高速定位标签,所述定位标签呈正方形,外部为颜色呈黑色的矩形边框,内部颜色为白色,所述矩形边框的四周的宽度相等,在所述矩形边框的上、下、左、右四个边框的中部分别设置四条白色间隔条,且上、下、左、右四个边框“黑-白-黑”的宽度比为3:2:3,所述右边框的白色间隔条的底端和所述下边框中的白色间隔条的右端相互连通,所述矩形边框内包含n个圆形标签,且n>4。
进一步的,所述圆形标签包括圆环、实心圆以及交叉十字,所述圆环的内圆半径和所述实心圆的半径相等,且所述圆环和实心圆共圆心,所述交叉十字在所述圆心处。
进一步的,在黑白相机视觉伺服场景中,所述圆形标签为灰度图,其中圆环的灰度值为0,实心圆的灰度值分为255或128,255表示二进制中的0,128表示二进制中的1,在彩色相机视觉伺服场景中,圆形标签为彩色图,其中圆环的rgb值为(72,116,193),实心圆的rgb值为(114,172,77)或(255,255,255),前者表示二进制中的1,后者表示二进制中的0。
一种基于上述定位标签的面向视觉伺服的高精度高速定位方法,包括如下步骤:
s1:将原始图片的长宽分别降采样为1/2大小,即采样后的图片像素是原始图片像素的1/4;
s2:将图片由三通道的rgb图像转换为单通道的gray图像;
s3:对图像进行二值化处理;
s4:对图像进行形态学处理;
s5:通过逐行扫描寻找边框的疑似特征点并验证疑似特征点是否为目标特征点;
s6:获取并优化定位标签位置;
s7:定位标签角点检测;
s8:调整定位标签角点顺序;
s9:获取圆形标签的中心点;
s10:获取定位标签的编码信息,根据所述的圆形标签标二进制的定义获取定位标签的编码;
s11:定位标签位姿估计。
进一步的,所述步骤s3中,图像二值化处理采用自适应阈值算法,步骤如下:
s301:计算gray图像的灰度直方图;
s302:直方图归一化;
s303:寻找直方图最大值位置,表示为indexhist-max,寻找直方图中第一个非零值的位置,表示为indexnon-zero;
s304:当(indexhist-max-indexnon-zero)<8时,提取右侧(indexhist-max+4,28-indexnon-zero)区间的灰度直方图,当(indexhist-max-indexnon-zero)≥8时,提取右左侧(0,indexhist-max*0.5)区间的灰度直方图;
s305:重新计算该直方图的最大值位置,表示为indexnew;
s306:根据右侧区间和左侧区间对应的非线性公式计算得到二值化阈值,非线性公式为:
右侧区间:
左侧区间:
进一步的,所述步骤s5中逐行扫描包括如下步骤:
s501:若当前像素和下一个相邻像素的像素值由255变为0,则当前像素点为外圈黑色边框外边界上的点;
s502:步骤s501满足之后,判断若当前像素和下一个相邻像素的像素值由0变为255,则当前像素点为外圈黑色边框和中圈白色边框边界上的点;
s503:步骤s502满足之后,判断若当前像素和下一个相邻像素的像素值由255变为0,则当前像素点为中圈白色边框和内圈黑色边框边界上的点;
s504:步骤s503满足之后,判断若当前像素和下一个相邻像素的像素值由0变为255,则当前像素点为内圈黑色边框内边界上的点;
s505:步骤s504满足之后,计算黑-白-黑边框的宽度,并根据定位标签“黑-白-黑”的宽度比为3∶2∶3验证疑似特征点是否为目标特征点;
s506:若宽度比例符合条件则当前找到的点为左边边框的特征点,重复步骤s501-s505,若找到宽度比例符合条件的特征点,则当前找到的点为右边边框的特征点,若未找到宽度比例符合条件的特征点,则之前找到的左边边框的特征点为干扰点,继续重复步骤s501-s505,重新寻找左边边框的特征点;
s507:若宽度比例不符合条件则说明这些特征点为干扰点,继续重复步骤s501-s505,重新寻找左边边框的特征点。
s508:当一行像素扫描完之后,继续按照同样的方法扫描下一行像素,直至扫描完整张图片;
s509:将图像旋转90°之后再扫描一次。
进一步的,所述步骤s6中的获取并优化定位标签位置包括:分别根据外圈黑色边框的特征点和内圈黑色边框的特征点,得到最小包围外旋转矩形和最小包围内旋转矩形,根据得到的旋转矩形的四条边将对应的特征点分为四组,每组特征点进行直线拟合,拟合得到四条直线作为新的旋转矩形的四条边,分别求取交点即旋转矩形的顶点,重复上述过程,直至旋转矩形的顶点位置稳定。
进一步的,所述步骤s7中的定位标签角点检测包括:定位标签角点在外旋转矩形和内旋转矩形的对应顶点之间,根据优化后的内旋转矩形和外旋转矩形的位置提取定位标签角点的感兴趣区域,在感兴趣区域内提取角点,并进一步优化定位标签角点的精度。
进一步的,所述步骤s9中的获取圆形标签的中心点包括:
s901:根据标准定位标签模板外角点的坐标ptemplate和当前定位标签的外角点坐标pcurrent计算标准定位标签模板到当前定位标签的仿射变换矩阵,公式为pcurrent=maffineptemplate,maffine为2×3的矩阵;
s902:利用仿射变换矩阵将标准定位标签模板的圆形标签中心点投影到当前定位标签,作为种子像素;
s903:利用floodfill算法检测圆形标签的实心圆,计算实心圆的圆心作为圆形标签的中心点;
s904:将得到的圆形标签中心点最为参考信息重新计算仿射变换矩阵,重复上述步骤直至圆形标签中心点位置收敛。
进一步的,所述步骤s11中的定位标签的位资估计的步骤包括:
s1101:载入事先测量好的定位标签角点和圆形标签中心点的像素坐标ppixel、由真实物理尺寸得到的世界坐标系下定位标签角点和圆形标签中心点的三维坐标preal;
s1102:根据相机成像模型和投影变换构建像素坐标和真实三维物理坐标之间的关系;
s1103:使用solvepnp算法最优求解符合当前观测的定位标签位姿。
相对于现有技术,本发明所述的一种面向视觉伺服的高精度高速定位标签和定位方法具有以下优势:
(1)与qrcode二维码检测算法不同,视觉检测特征不仅出现在定位标签的顶点还出现在定位标签的四周,有效提升了定位标签的有效检测距离;
(2)定位标签兼具定位和编码能力,有效提升了定位标签的精度,特别是在出现较大畸变的场景下,经测量,本定位标签与同样尺寸的二维码相比定位精度显著提高,达到了0.2mm(二维码的定位精度约为1mm);
(3)相对于二维码式的定位标签,本定位标签在检测速度方面显著改进,能更好的满足高速视觉伺服的需求,经测量,本定位标签与同样尺寸的二维码相比检测速度显著提高,检测耗时为8ms(二维码的检测耗时为30ms)。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的定位标签示意图;
图2为本发明实施例所述的定位方法流程图;
图3为本发明实施例所述的逐行扫描的算法流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面将参考附图并结合实施例来详细说明本发明。
如图1所示,一种面向视觉伺服的高精度高速定位标签,所述定位标签呈正方形,内部颜色为白色,外部为颜色呈黑色的矩形边框,所述矩形边框的四周的宽度相等,在所述矩形边框的上、下、左、右四个边框的中部分别设置四条白色间隔条,且上、下、左、右四个边框“黑-白-黑”的宽度比为3:2:3,所述右边框的白色间隔条的底端和所述下边框中的白色间隔条的右端相互连通,所述矩形边框内包含n个圆形标签,且n>4,所述圆形标签包括圆环、实心圆以及交叉十字,所述圆环的内圆半径和所述实心圆的半径相等,且所述圆环和实心圆共圆心,交叉十字在所述圆心处,需要说明的是,交叉十字用于测试视觉检测方法的精度,定位标签在实际应用中可以不设置交叉十字。在黑白相机视觉伺服场景中,所述圆形标签为灰度图,其中圆环的灰度值为0,实心圆的灰度值分为255或128,255表示二进制中的0,128表示二进制中的1,在彩色相机视觉伺服场景中,圆形标签为彩色图,其中圆环的rgb值为(72,116,193),实心圆的rgb值为(114,172,77)或(255,255,255),前者表示二进制中的1,后者表示二进制中的0,在本实施例中,定位标签中包含23个圆形标签,呈5排排列,每排的数量依次为5、4、5、4、5,可表示2^23个编码信息,能满足绝大多视觉伺服的编码需求。
如图2所示,基于上述的定位标签的面向视觉伺服的高精度高速定位方法,包括如下步骤:
s1:为提高检测速度,将原始图片的长宽分别降采样为1/2大小,即采样后的图片像素是原始图片像素的1/4;
s2:将图片由三通道的rgb图像转换为单通道的gray图像;
s3:对图像进行二值化处理;
s4:对图像进行形态学处理;
s5:通过逐行扫描寻找边框的疑似特征点并验证疑似特征点是否为目标特征点;
s6:获取并优化定位标签位置;
s7:定位标签角点检测;
s8:调整定位标签角点顺序;
s9:获取圆形标签的中心点;
s10:获取定位标签的编码信息,根据所述的圆形标签标二进制的定义获取定位标签的编码;
s11:定位标签位姿估计。
在步骤s3中,图像二值化处理采用自适应阈值算法,步骤如下:
s301:计算gray图像的灰度直方图;
s302:直方图归一化;
s303:寻找直方图最大值位置,表示为indexhist-max,寻找直方图中第一个非零值的位置,表示为indexnon-zero;
s304:当(indexhist-max-indexnon-zero)<8时,提取右侧(indexhist-max+4,28-indexnon-zero)区间的灰度直方图,当(indexhist-max-indexnon-zero)≥8时,提取右左侧(0,indexhist-max*0.5)区间的灰度直方图;
s305:重新计算该直方图的最大值位置,表示为indexnew;
s306:根据右侧区间和左侧区间对应的非线性公式计算得到二值化阈值,非线性公式为:
右侧区间:
左侧区间:
在步骤s4中,形态学处理:对二值化的图像进行膨胀和腐蚀处理,所用矩形内核的尺寸为5×5,进一步消除噪声对二值化的影响,提升二值化的效果;
在步骤s5中,逐行扫描包括如下步骤:
s501:若当前像素和下一个相邻像素的像素值由255变为0,则当前像素点为外圈黑色边框外边界上的点;
s502:步骤s501满足之后,判断若当前像素和下一个相邻像素的像素值由0变为255,则当前像素点为外圈黑色边框和中圈白色边框边界上的点;
s503:步骤s501和步骤s502满足之后,判断若当前像素和下一个相邻像素的像素值由255变为0,则当前像素点为中圈白色边框和内圈黑色边框边界上的点;
s504:步骤s501-s503都满足之后,判断若当前像素和下一个像素的像素值由0变为255,则当前像素点为内圈黑色边框内边界上的点;
s505:步骤s501-s504都满足之后,计算黑-白-黑边框的宽度,并验证宽度比例;
s506:若宽度比例符合条件则当前找到的点为左边边框的特征点,重复步骤s501-s505,若找到宽度比例符合条件的特征点,则当前找到的点为右边边框的特征点,若未找到宽度比例符合条件的特征点,则之前找到的左边边框的特征点为干扰点,继续重复步骤s501-s505,重新寻找左边边框的特征点;
s507:若宽度比例不符合条件则说明这些特征点为干扰点,继续重复步骤s501-s505,重新寻找左边边框的特征点。
s508:在一行上找到两组目标特征点并确认后,将这两组目标特征点添加到列表中,继续按照同样的方法扫描下一行像素,直至扫描完整张图片;
s509:考虑到定位标签在图像上可能出现大角度倾斜的情况,将图像旋转90度之后再扫描一次。
为加快扫描速度,可以在合理的范围内间隔n行扫描一行。
如图3为逐行扫描算法流程图,其中初始化包括:
设置图像高度为h,宽度为w,设置标志位flag-rotate=0,设置标志位flag-black-outer=0,设置标志位flag-black-white=0,设置标志位flag-white-black=0,设置标志位flag-black-inner=0,设置标志位flag-left-feature=0,设置标志位flag-right-feature=0,定义左侧特征点列表为list-left,定义右侧特征点列表为list-right,定义上面特征点列表为list-top,定义下面特征点列表为list-bottom,定义左侧临时特征点为feature-tmp,定义图像的像素值为1。
步骤s6中的获取定位标签位置包括:
逐行扫描得到定位标签黑-白-黑边框上的特征点,分为外圈黑色边框特征点和内圈黑色边框特征点,分别将外圈、内圈黑色边框特征点作为输入,首先使用sklansky在1982年提出的方法找到最小包围特征点的凸多边形,然后遍历凸多边形的顶点,寻找凸多边形顶点的最上、最下、最左、最右值,并计算与相邻点的方向,最后根据四个方向的最大值点和与相邻点的方向确定最小包围矩形的方向和尺寸信息,得到最小包围外旋转矩形和最小包围内旋转矩形;
优化定位标签位置包括:根据得到的旋转矩形的四条边将对应的特征点分为四组,每组特征点进行直线拟合,拟合得到四条直线作为新的旋转矩形的四条边,分别求取交点即旋转矩形的顶点,重复上述过程,直至旋转矩形的顶点位置稳定。
步骤s7中定位标签角点检测包括:定位标签角点在外旋转矩形和内旋转矩形的对应顶点之间,为加速角点检测速度以及排除尽可能多的干扰,首先根据优化后的外旋转矩形和内旋转矩形的位置,提取定位标签角点所在的感兴趣区域,假定内外旋转矩形的一组顶点的坐标为(uinner,vinner)和(uouter,vouter),则该感兴趣区域的左上方顶点为
步骤s8中,定义两条白色间隔条相连的角点为起始角点,按照逆时针的顺序调整定位标签角点顺序。
步骤s9中获取圆形标签的中心点的步骤包括:
s901:根据标准定位标签模板外角点的坐标ptemplate和当前定位标签的外角点坐标pcurrent计算标准定位标签模板到当前定位标签的仿射变换矩阵,公式为pcurrent=maffineptemplate,maffine为2×3的矩阵;
s902:利用仿射变换矩阵将标准定位标签模板的圆形标签中心点投影到当前定位标签,作为种子像素;
s903:利用floodfill算法检测圆形标签的实心圆,计算实心圆的圆心作为圆形标签的中心点;
s904:将得到的圆形标签中心点最为参考信息重新计算仿射变换矩阵,重复上述步骤直至圆形标签中心点位置收敛。
所述步骤s11中,定位标签的位资估计的步骤包括:
s1101:载入事先测量好的定位标签角点和圆形标签中心点的像素坐标ppixel、由真实物理尺寸得到的世界坐标系下定位标签角点和圆形标签中心点的三维坐标preal;
s1102:根据相机成像模型和投影变换构建像素坐标和真实三维物理坐标之间的关系;
s1103:使用solvepnp算法最优求解符合当前观测的定位标签位姿。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。