CN114078220A - 一种基于深度相机的托盘识别方法 - Google Patents
一种基于深度相机的托盘识别方法 Download PDFInfo
- Publication number
- CN114078220A CN114078220A CN202210059418.4A CN202210059418A CN114078220A CN 114078220 A CN114078220 A CN 114078220A CN 202210059418 A CN202210059418 A CN 202210059418A CN 114078220 A CN114078220 A CN 114078220A
- Authority
- CN
- China
- Prior art keywords
- tray
- depth
- value
- pixel
- scanning
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Length Measuring Devices By Optical Means (AREA)
Abstract
本发明公开了一种基于深度相机的托盘识别方法。为了克服现有技术不能对偏转角较大的托盘,进行有效识别;部署难度大,运算量大的问题;包括以下步骤:相机获取包含托盘的深度图与灰度图的图像帧数据流;设置扫描算子,对灰度图中的托盘进行轮廓扫描,并对托盘的轮廓线进行标记;归纳常见托盘形状与尺寸,以及实际使用中托盘与相机偏转角度,确认托盘判定依据;对已标记过轮廓线的灰度图进行图像扫描,寻找符合托盘轮廓的标记位置;对符合托盘轮廓的标记进行判断;计算托盘平面相对相机平面的偏转角度和托盘中心与相机中心X轴偏差值。能对偏转角较大的托盘进行有效识别;部署难度简单,运算量小。
Description
技术领域
本发明涉及一种视觉识别领域,尤其涉及一种基于深度相机的托盘识别方法。
背景技术
智能定位和导航功能在智能仓储领域应用越来越广,使用3D深度相机安装于叉车识别定位目标托盘技术便是其中之一。
3D深度相机不仅可以生成二维图像,还附带图像的深度信息。在托盘识别方案中,可以通过灰度图或者深度图识别托盘,再通过深度信息,获取托盘的偏转角以及托盘与叉车的位置偏差值。根据托盘的偏转角和位置差值,叉车可以自主导航,准确插取托盘。
现有深度相机托盘识别方案,是根据标准托盘的三维信息生成点云模板,使用该点云模板与使用时采集到的深度点云数据进行匹配,来识别托盘是否存在。例如,一种在中国专利文献上公开的“一种面向无人叉车的托盘识别定位方法”,其公告号CN112017240A,包括如下步骤:S1,集成单目相机与单线激光雷达,对对其进行标定,得到相机的内参矩阵和外参矩阵;S2,选取并完成神经网络系统的训练及部署;S3,通过神经网络获取托盘识别框顶点的二维坐标和内参矩阵,得到托盘左右两侧与相机光心的连线,与相机光轴的夹角;S4,根据单线激光雷达测距信息和外参矩阵,将点云投影到相机坐标系下,根据夹角,对相机坐标系下的点云进行滤波,保留托盘对应的点云;S5,将托盘对应的点云,利用霍夫变换进行直线检测,拟合出托盘前表面及托盘前表面中心点的二维坐标及托盘前表面在相机坐标系中的倾角。
这种方案弊端是不能对偏转角较大的托盘,进行有效识别;其次,基于数据匹配,未设定数据权重,存在很多误识别和不识别的情况;最后模板识别方案,需要针对不同托盘设定模板,从而增加部署难度,模板匹配的运算量大,运算时间长,不利于叉车快速插取,降低货舱周转效率。
发明内容
本发明主要解决现有技术不能对偏转角较大的托盘,进行有效识别;部署难度大,运算量大的问题;提供一种基于深度相机的托盘识别方法,根据深度相机灰度图,深度信息和图像扫描算法,来识别托盘位置并计算托盘偏转角。
本发明的上述技术问题主要是通过下述技术方案得以解决的:
一种基于深度相机的托盘识别方法,包括以下步骤:
S1:相机获取关于托盘的包含深度图与灰度图的图像帧数据流;
S2:设置扫描方式以及扫描算子像素大小,对灰度图中的托盘进行轮廓扫描,并对托盘的轮廓线进行标记;
S3:归纳常见托盘形状、尺寸以及实际使用中托盘与相机偏转角度,确定托盘判定依据;
S4:对已标记过轮廓线的灰度图进行图像扫描,寻找符合托盘轮廓的标记位置;
S5:对符合托盘轮廓的标记进行判断;
S6:计算托盘平面相对相机平面的偏转角度和托盘中心与相机中心X轴偏差值。
本方案通过扫描灰度图的亮度变化勾勒托盘的轮廓;根据托盘尺寸信息,深度信息与相机视场角的对应关系,采用轮廓跟踪和像素扫描方式计算托盘的长度高度,并计算托盘墩是否同一平面和尺寸,以及插孔尺寸,识别托盘。能对偏转角较大的托盘进行有效识别;部署简单,运算量小。
作为优选,选择左右扫描方式,设置扫描算子像素大小;对灰度图的亮度进行扫描,设定亮度阈值,根据像素亮度变化比例进行灰度图的像素点扫描和标记。
根据托盘识别场景,托盘存在上方堆叠,或者放置货物。托盘下面接地,左右有货架或者相邻托盘。因此托盘左右和下方,环境相对简单,可以从左右或者下方进行扫描。但是考虑到托盘高度方向特征点较少,不足以作为托盘识别的充分条件,因此采用左右扫描的方式,上下扫描仅作补充验证。
作为优选,所述的托盘判定依据包括:
托盘长度阈值范围、托盘高度阈值范围;
判断托盘墩数量且托盘墩位于同一平面,根据偏转角确定深度差值;
确定插孔与相邻托盘墩之间的深度差值,并基于偏转角进行修正;
对托盘墩和插孔尺寸的测量。
为步骤S5的判断定下标准与基础。
作为优选,所述的步骤S4具体包括以下过程:
S401:根据垂直轮廓点确认起点,计算托盘对应像素个数;
S402:计算托盘偏转角及托盘左右两边的深度差值;
S403:使用轮廓跟踪,统计托盘长对应的实际像素个数;
S404:扫描托盘墩和托盘叉孔的像素个数;
S405:计算托盘右边沿高度对应的像素个数及其起点坐标;
S406:根据托盘长度像素个数和计算得到的右侧高度像素个数,扫描右侧边沿。
计算寻找符合托盘轮廓的标记位置。
作为优选,所述的确认起点的过程包括:
A:根据经验值满足连续若干点为标记点的,确定居中的点为起点;
B:以起点坐标开始,判断垂直方向连续30个像素灰度值和是否大于灰度阈值,若是,则进入下一步,否则返回上一步;
C:根据视场角和分辨率计算深度d处的像素间隔,并根据托盘高度范围计算托盘对应像素个数。
确定左侧边缘轮廓。
作为优选,步骤C中的计算过程为:
起点坐标偏移若干个像素后,采集对应像素点的深度值depth_temp[i+n1][j+n2],计算托盘最低高度对应的像素个数Xn_lift:
其中,(i,j)是起点坐标,(n1,n2)是平移距离;
判断连续Xn_lift个像素灰度值和是否大于灰度阈值,若是,则进入下一步,否则返回上一步。
作为优选,还包括相机视场边沿畸变导致的成像变形处理;
设置最大偏移阈值offset_detect;
判断灰度图的ir_temp[i][j+offset_detect]灰度值是否为标记值;若是,则判断下一个点ir_temp[i+1][j+offset_detect],否则offset_detect加1;
向右偏移一个像素点ir_temp[i][j+offset_detect]判断灰度值是否为标记值;若是判断下一个点,否则向左偏移一个点ir_temp[i][j-offset_detect]继续判断;
如果左右各偏移1个像素仍不是标记点,则该横坐标得灰度值即为0;如此循环,直至纵坐标从i到i+Xn_lift统计完毕。
作为优选,深度差值的计算过程为:
起始点向下偏转0.2*Xn_lift,向右分别偏转0.2*Xn_lift和0.5*Xn_lift;得到两个水平坐标作为托盘偏转的初始判断依据;分别对这两点做3*3的空间域滤波,并根据三角函数计算偏转角度:
其中,difference1 为两个坐标的深度差值;
difference2 为水平像素间隔x乘以像素个数得到三角形斜边长;
angle1 为根据左侧托盘墩计算得到初始托盘偏转角;
根据三角函数关系,托盘右边相对左边的深度差correct_L:
其中,tray_long为托盘实际长度。
作为优选,根据托盘三个托盘墩位于同一平面的特点,按照托盘墩端面相对深度斜率一致性进行扫描,来分别标记托盘墩和叉孔,并统计对应像素个数和中点坐标作为下一步托盘识别依据;
首先对起点进行3*3空间域滤波;
然后计算基准斜率,选择若干点分别计算其与基准点的斜率,并计算斜率的均值Kp作为判断依据;
设定斜率判断阈值,纵坐标不变,横坐标累加,从左到右依次扫描,当扫描点与基准点斜率,与斜率的均值Kp的差值小于0.5标记为4005,否则标记为1000;
最后,在基于斜率扫描标记完成之后,重复扫描轨迹,统计托盘墩与叉孔的横坐标,并计算左侧叉孔,托盘中心,右侧叉孔对应的横坐标,作为托盘识别的判定依据。
作为优选,根据托盘左侧深度值和偏转角度,计算与右侧边沿的差值,在左侧托盘深度值上减去该差值即为右侧托盘对应的深度值,该值除像素间隔得到托盘右边沿对应的像素个数Xn_right。
本发明的有益效果是:
本方案通过扫描灰度图的亮度变化勾勒托盘的轮廓;根据托盘尺寸信息,深度信息与相机视场角的对应关系,采用轮廓跟踪和像素扫描方式计算托盘的长度高度,并计算托盘墩是否同一平面和尺寸,以及插孔尺寸,识别托盘。能对偏转角较大的托盘进行有效识别;部署简单,运算量小。
附图说明
图1是本发明的一种基于深度相机的托盘识别方法流程图。
图2是本发明的轮廓扫描标记示意图。
图3是本发明的步骤S4的具体流程图。
图4是本发明的托盘对应像素个数计算流程图。
图5是本发明的畸变矫正示意图。
图6是本发明的轮廓跟踪示意图。
图7是本发明的托盘墩和托盘叉孔扫描示意图。
图8是本发明检测到托盘左右边沿标记示意图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
实施例:
本实施例的一种基于深度相机的托盘识别方法,如图1所示,包括以下步骤:
S1:相机获取包含托盘的图像帧数据流,图像帧数据流包括深度图与灰度图;
深度相机根据预设参数启动,拍摄托盘图像,获取深度图与灰度图。将以指针数据存储的深度图与灰度图转换成二维数组,便于根据像素坐标对图像帧进行操作。
S2:设置扫描算子,对灰度图中的托盘进行轮廓扫描,并对托盘的轮廓线进行标记。
选择扫描方式;根据托盘识别场景,托盘存在上方堆叠,或者放置货物。托盘下面接地,左右有货架或者相邻托盘。因此托盘左右和下方,环境相对简单,可以从左右或者下方进行扫描。但是考虑到托盘高度方向特征点较少,不足以作为托盘识别的充分条件,因此在本实施例中采用左右扫描的方式,上下扫描仅作补充验证。
设置扫描算子像素大小;托盘识别主要扫描托盘的轮廓,再根据轮廓的尺寸和相对轮廓的特征点深度信息进行判断。因此扫描算子主要勾勒托盘轮盘轮廓,目标单一,此处设计单一算子进行扫描。在本实施例中,扫描算子大小为8*1像素。
轮廓扫描并标记;算子可以对灰度图的亮度变化进行扫描,也可以对深度图的深度变化进行扫描。在本实施例中选择对灰度图的亮度进行扫描,设定亮度阈值,根据像素亮度变化比值进行像素点扫描和标记。标记可以根据亮度变化程度分层标记,也可以单一标记,作为后续轮廓识别的标识。
从左到右,灰度图扫描,亮度变化单一标记如图2所示,图中白色部分为轮廓识别的标识。对灰度图的亮度进行扫描,设定亮度阈值,根据像素亮度变化比值进行灰度图的像素点扫描和标记。
以某项目为例,设置扫描算子ir_recursion[8]。算子如滑块一样,从左到右依次划过图像,每次统计当前像素灰度值与算子平均灰度值差值,占平均灰度值的比例,设定比例阈值,当大于设定比例阈值时,对该像素进行标记。
算子ir_recursion[8]采用递推形式更新数组元素,即算子滑动更新数组元素时,先将第一个数组元素ir_recursion[0]丢掉,将数组第二个元素移动到第一个元素位置,将第三个移动至第二个,以此类推,直至将第8个移动至第7个,空出来的第8个元素使用算子滑动到当前像素灰度值填充。
计算算子元素的平均灰度值b_ir_temp,b_ir_temp初值为0, 设数组元素序号k从0到7依次累加,依次计算b_ir_temp = b_ir_temp +ir_recursion[k];然后计算算子灰度平均值b_ir_temp。
b_ir_temp = b_ir_temp*0.125;
求当前像素灰度值与算子平均灰度值差值的绝对值b_ir。
b_ir=_abs(ir_temp[i][j], b_ir_temp);
此处_abs(int a,int b)为求a与b差值绝对值函数。
再计算该差值绝对值占算子平均灰度值的比例b_ir_proportion。
b_ir_proportion= b_ir/b_ir_temp;
设定比例阈值为0.35,当b_ir_proportion大于0.35时,标记当前像素为3999,3999为轮廓标记值,无其他含义。
S3:归纳常见托盘形状、尺寸以及实际使用中托盘与相机偏转角度,确定托盘判定依据。
标准托盘横梁长度一般为:1m/1.1m/1.2m;整体高度:14cm~18cm;每根立柱宽度:14cm~20cm;每个叉孔宽度:20cm到30cm。
托盘长度检测判定依据包括:
1. 托盘长度阈值范围、托盘高度阈值范围。
在本实施例中,托盘长度大于1米小于1.2米,偏差值0.1米;托盘高度范围14到18厘米,上下偏差2厘米。
2. 判断托盘墩数量且托盘墩是否位于同一平面。
在本实施例中判断是否三个托盘墩位于同一平面,并根据偏转角度确定深度差值。
3. 确定插孔与相邻托盘墩之间的深度差值。
在本实施例中两个插孔与相邻托盘墩深度差值大于20cm,但是当托盘发生偏转时,托盘叉孔成像可能会落在叉孔侧边沿处,即成像深度发生变化,此时需要根据偏转角度进行修正判断阈值。
例如,设托盘偏转角度为angle。根据实际测量,当偏转角angle大于10°时,叉孔中心成像深度开始发生改变。因此根据托盘偏转角angle是否大于10°来修改叉孔与相邻托盘墩端面深度差阈值。
当angle大于10°时,叉孔与相邻托盘墩端面差值阈值设置为30mm,小于等于10°时,叉孔与相邻托盘墩端面差值阈值仍为200mm。
4. 对托盘墩和插孔尺寸的测量;对于三个托盘墩和插孔的大小测量。
S4:对已标记过轮廓线的灰度图进行图像扫描,寻找符合托盘轮廓的标记位置。具体过程如图3所示。
S401:根据垂直轮廓点确认起点,计算托盘对应像素个数。
为了节约算力,如图4所示,托盘对应像素个数的计算包括以下过程:
A:单点确认,根据经验,托盘轮廓起点满足连续若干点为标记点且起点居中。
灰度图从上到下,从左到右依次扫描。判断若干连续点是否为轮廓标记点。ir_temp[i][j]为当前像素点,除过该点,还需判断其余连续点是否为轮廓标记点,这些点包括:ir_temp[i+2][j],ir_temp[i+4][j],ir_temp[i+6][j], ir_temp[i+8][j],ir_temp[i+2][j+1], ir_temp[i+1][j], ir_temp[i-1][j], ir_temp[i-2][j]。
判断这些像素点的灰度值是否均为轮廓标记值3999(灰度图中的轮廓标记值为3999);若是,则可能为托盘左边沿起点,进入下一步检测;否则返回继续寻找满足条件的起点,直至扫描结束。
在本实施例中,一张图像大小ir_temp[480][640]。
B:从起点坐标开始,判断垂直方向连续30个像素灰度值和是否大于灰度阈值,若是,则进入下一步,否则返回上一步。
根据经验连续采集30个像素点进行统计,判断是否为连续轮廓点。根据相机视场角和分辨率,相机在最远识别距离处的托盘边沿高度对应的实际像素大于30个像素。
即从上步骤确认的起始开始,垂直向下,连续统计30个点的总灰度值,是否大于等于设定阈值3999*25,此处允许16%标记偏差。若大于该阈值,若是则进入下一步。否则返回上一步。
C:根据视场角和分辨率计算深度d处的像素间隔,并根据托盘高度范围计算托盘对应像素个数。
在本实施例中,相机的视场角为水平120°,垂直60°;根据图像的分辨率640*480和视场角120°*60°,计算此深度对应的像素间隔映射的实际距离,则:
依据上步骤中计算出的像素间隔系数,根据托盘高度范围14到18厘米计算像素个数,则:
为了规避轮廓位置深度值不稳定,起点坐标偏移若干个像素后,采集对应像素点的深度值depth_temp[i+n1][j+n2],计算托盘最低高度对应的像素个数Xn_lift:
其中,(i,j)是起点坐标,(n1,n2)是平移距离。
在本实施例中,灰度图起点坐标ir_temp[i][j]根据经验值向下和向右偏转20个像素后采集深度值depth_temp[i+20][j+20],代入公式计算托盘最低的高度对应的像素个数:
其中,Xn_lift为托盘左侧高度对应像素个数,tray_high为托盘实际高度,在本实施例中取14厘米。
判断连续Xn_lift个像素灰度值和是否大于灰度阈值,若是,则进入下一步,否则返回上一步。
灰度阈值一般按照总灰度值的80%设置,即Xn_lift*3999*0.8。
D:相机视场边沿畸变导致的成像变形处理。
相机都会存在畸变,尤其是大视场角相机。畸变会导致成像变形,视场角边沿处的托盘轮廓已不再垂直于地面。实际使用中的托盘由于制造误差或磨损也存在边沿倾斜的情况。如图5所示的托盘左侧边沿,产生了畸变。
此时像素的标记点统计就需要跟随轮廓线。设置最大偏移阈值offset_detect,在该阈值的范围,向左或者向右偏移采集到的标记点也为有效轮廓线标记点。同一纵坐标只能向左或者向右偏移一次。
在上步骤基础上,设置最大偏移阈值:offset_detect最大偏移8个像素,初始值设置0。
像素统计区域不变:即起点开始向下偏移Xn_lift个像素。
判断ir_temp[i][j+offset_detect]是否为标记值3999;若是,则判断下一个点ir_temp[i+1][j+offset_detect],否则offset_detect加1,即offset_detect = offset_detect+1;
向右偏移一个点ir_temp[i][j+offset_detect]判断是否为标记值3999,若是判断下一个点,否则向左偏移一个点ir_temp[i][j-offset_detect]继续判断;
如果左右各偏移1个像素仍不是标记点,那么该横坐标得灰度值即为0。如此循环,直至纵坐标从i到i+Xn_lift统计完毕。
判断连续Xn_lift个像素灰度值和是否大于灰度阈值,若是,则进入下一步,否则返回上一步。
S402:计算托盘偏转角及托盘左右两边的深度差值。
确认左侧第一条边之后,根据托盘墩宽度范围计算偏转量。如上托盘宽度14到18厘米,除以水平像素间隔得到托盘墩宽度对应的像素个数。tray_high为托盘高度,d为此处的深度值。
起始点向下偏转0.2*Xn_lift,向右分别偏转0.2*Xn_lift和0.5*Xn_lift。得到两个水平坐标作为托盘偏转的初始判断依据。分别对这两点做3*3的空间域滤波,并根据三角函数计算偏转角度。
其中,depth_temp[i,j]为坐标(i,j)的深度值;
difference1 为这两个坐标的深度差值。
difference2 为水平像素间隔x乘以像素个数得到三角形斜边长;
像素个数为(0.5-0.2)*Xn_lift。
angle1 为根据左侧托盘墩计算得到初始托盘偏转角。
根据三角函数关系,托盘右边相对左边的深度差correct_L:
其中,tray_long为托盘实际长度。
correct_L为托盘左右深度差。
S403:使用轮廓跟踪,统计托盘长对应的实际像素个数。
托盘中上部分均有一条左右连续联通的支撑物,所有托盘均如此,此支撑物为塑料或者模板。采用轮廓跟踪方式,就能够判断托盘是否存在,也可以统计托盘长度对应的实际像素个数,作为下一步特征点判断的依据。
根据经验值计算轮廓跟踪的起始纵坐标lift_middle_start:
lift_middle_start =i+Xn_lift *0.214;
其中,i为起点ir_temp[i][j]的纵坐标,Xn_lift为步骤S402计算得到托盘左边高度对应像素个数,偏移值0.214为经验值,由于轮廓跟踪设置向上和向下追踪,因此可不做精确要求。
轮廓跟踪的横坐标j+10,以轮廓起点为基准,偏移10个像素规避边沿轮廓的干扰。图像分辨率640*480,即横坐标范围0到639。坐标即为:ir_temp[lift_middle_start][k],k>j+10且k<640。
当轮廓连续且没有被标记,即ir_temp[lift_middle_start][k]不等于3999;且灰度值大于50LSB,即ir_temp[lift_middle_start][k]≥50,深度值大于200mm,即depth_temp[lift_middle_start][k]≥200,此时标记该像素灰度值4004,4004只为一个标记值。
灰度值大于50LSB,深度值大于200mm排除非托盘像素的影响。
当遇到被标记点,即ir_temp[lift_middle_start][k]==3999,或ir_temp[lift_middle_start][k]<50且depth_temp[lift_middle_start][k]<200时;扫描点可能遇到上下边沿或者右侧边沿。此时扫描点上下各偏移2个像素,再进行判断。
若连续两次上下偏移之后还是不满足,即代表到了右侧轮廓线位置,记录该点横坐标与初始横坐标j的差值,即为托盘长度对应的像素个数tray_pixel_num_x。其中k当前横坐标,j为轮廓起点横坐标。
tray_pixel_num_x = k-j-2。
使用上述轮廓跟踪方法,获得的轮廓跟踪如图6所示的白色标记,能够解决托盘因为大偏转角带来的成像像素非线性变化。但是在不确定是否为托盘的情况下,需要对该值进行经验值判断。按照设计指标,最大40°的偏转角度,并预留一定的余量。
托盘未偏转时,深度depth_temp[i+offset_num][j+offset_num]对应的像素个数tray_pixel_num_x_zero如下式:
tray_pixel_num_x_zero=tray_long/(depth_temp[i+offset_num][j+offset_num]*0.0054);
按照偏转引起1.4倍最大值和0.7倍最小值进行验证。即:
tray_pixel_num_x>0.7*tray_pixel_num_x_zero 且tray_pixel_num_x<1.4*tray_pixel_num_x_zero时;tray_pixel_num_x为有效值。
当不属于该范围时,需要参考偏转角angle1进行判断。
S404:扫描托盘墩和托盘叉孔的像素个数。
托盘三个托盘墩位于同一平面,根据此特点,按照托盘墩端面相对深度斜率一致性进行扫描,来分别标记托盘墩和叉孔,并统计对应像素个数和中点坐标作为下一步托盘识别依据。
斜率扫描纵坐标默认从托盘高度一半位置开始,横坐标轮廓起点横坐标向右偏移0.2*Xn_lift。
首先对起点进行3*3空间域滤波,该点的深度值为:lift_middle_start_05_depth=( depth_temp[lift_middle_start_05-1][j+offset_num-1]+depth_temp[lift_middle_start_05][j+offset_num-1]+depth_temp[lift_middle_start_05+1][j+offset_num-1]+depth_temp[lift_middle_start_05-1][j+offset_num]+depth_temp[lift_middle_start_05][j+offset_num]+depth_temp[lift_middle_start_05+1][j+offset_num]+depth_temp[lift_middle_start_05-1][j+offset_num+1]+depth_temp[lift_middle_start_05][j+offset_num+1]+depth_temp[lift_middle_start_05+1][j+offset_num+1])/9;
其中 lift_middle_start_05 =i+Xn_lift *0.5,offset_num=0.2*Xn_lift,Xn_lift为步骤S401中计算得到的托盘高度对应的像素。之所以选择高度对应的像素,因为托盘墩宽和高相近,宽度且略大于高。
然后计算基准斜率:选择若干点分别计算其与基准点的斜率,并计算斜率的均值作为判断依据。纵坐标不变,本例横坐标选择偏移0.5*Xn_lift,选择连续5个点,计算斜率Kp。
K1=(lift_middle_start_05_depth-depth_temp[lift_middle_start_05][j+0.5*Xn_lift])/(0.5*Xn_lift-0.2*Xn_lift);
如上,5个点计算完之后计算均值Kp=(K1+K2+K3+K4+K5)*0.2。
之后,设定斜率判断阈值,本例阈值取0.5。纵坐标不变,横坐标累加,从左到右依次扫描,当扫描点与基准点斜率,与Kp的差值小于0.5是标记4005,否则标记为1000。4005与1000仅为标记,无实际意义。当扫描横坐标大于等于j+tray_pixel_num_x时,退出扫描。表示已扫描到托盘右边沿。
最后,在基于斜率扫描标记完成之后,重复上步骤的扫描轨迹,统计托盘墩与叉孔的横坐标,并计算左侧叉孔,托盘中心,右侧叉孔对应的横坐标,作为托盘识别的判定依据。托盘墩和托盘叉孔扫描如图7所示。
设变量s和标志lift_middle_start_05_flag,lift_middle_start_05_flag初值设置为0。其它变量以此为:
左侧叉孔起始横坐标:lift_middle_start_05_01=0;
左侧叉孔结束横坐标:lift_middle_start_05_02=0;
右侧叉孔起始横坐标:lift_middle_start_05_03=0;
右侧叉孔结束横坐标:lift_middle_start_05_04=0;
纵坐标不变,横坐标从s=j+offset_num+1到639进行扫描。相同的轨迹,初始点必为左侧托盘墩端面上的点,此时坐标点灰度值为标记值 ir_temp[lift_middle_start_05][s] == 4005,flag为0。当横坐标依次增加,移到叉孔位置时,此时检测到 ir_temp[lift_middle_start_05][s] == 1000时,记录此时的横坐标s为左侧叉孔的起始点,lift_middle_start_05_flag标志加1。
在左侧叉孔位置检测到灰度值均为1000。横坐标继续偏移,当到左侧叉孔结束位置时,该位置灰度值变为4005,记录此时的横坐标s为左侧叉孔的结束点,lift_middle_start_05_flag加1。
同理,根据灰度标记值和标志lift_middle_start_05_flag的值可以依次标记剩余右侧叉孔的起点和终点。
当lift_middle_start_05_flag = 4时,表明扫描结束,退出循环。
根据叉孔的横坐标,计算托盘叉孔中心点坐标和左右叉孔中心点坐标。如下式:
tray_pixel_num_x_middle=(lift_middle_start_05_02+lift_middle_start_05_03)*0.5;
tray_pixel_num_x_middle_2=(lift_middle_start_05_01+lift_middle_start_05_02)*0.5;
tray_pixel_num_x_middle_3=(lift_middle_start_05_03+lift_middle_start_05_04)*0.5;
其中tray_pixel_num_x_middle,tray_pixel_num_x_middle_2 ,tray_pixel_num_x_middle_3分别为托盘中心坐标,左叉孔,右插孔的中心点坐标。
S405:计算托盘右边沿高度对应的像素个数及其起点坐标。
根据托盘左侧深度值和偏转角度,计算与右侧边沿的差值:
correct_L = sin(angle1)*tray_long;
在左侧托盘深度值上减去该差值即为右侧托盘对应的深度值,该值除像素间隔得到托盘右边沿对应的像素个数Xn_right。
其中tray_long,tray_depth为标准托盘长度和高度,depth_temp[i+20][j+20]为左侧托盘边沿位置的深度值。
Xn_right=(uint16)(tray_depth/((depth_temp[i+20][j+20]-sin(angle1)*tray_long*)*0.0024));
托盘右边沿起始坐标确认,横坐标为j+tray_pixel_num_x,纵坐标right_start_i为:
right_start_i=i+(tray_pixel_num_y_lift-tray_pixel_num_y_right)*0.3;
其中,i,j为托盘左边沿起点坐标,tray_pixel_num_x托盘长度对应像素个数,tray_pixel_num_y_lift与tray_pixel_num_y_right分别为托盘左右高度。
S406:根据托盘长度像素个数和计算得到的右侧高度像素个数,扫描右侧边沿。
根据步骤S405中得到的托盘右边沿起点位置和计算得到的托盘右边沿高度的像素个数,进行验证扫描。
若该位置存在灰度图标记的轮廓且检测到的标记个数与推算出来的tray_pixel_num_y_right相近,则可能托盘轮廓,进入下一步检测。否则返回检测起始位置,移动起始点坐标,进行下一次检测。
具体扫描方式,以横坐标j+tray_pixel_num_x为基准,左右偏移n来寻找右边沿轮廓。该轮廓检测简化为两步,方式如S401中步骤A和步骤C。检测到托盘左右边沿标记如图8所示。
本实例中,在相机据托盘中心1米处,托盘偏转20°情况下,计算得到托盘参数依次如下:
托盘左侧边沿起点坐标:i=99,j=107。
托盘左侧边沿对应的像素个数;Xn_lift=70。
托盘右侧边沿起点坐标:i=120,j=446。
托盘右侧边沿对应的像素个数Xn_right=40。
托盘左右边沿处的深度差correct_L=200mm。
轮廓扫描起始纵坐标:lift_middle_start=113。
叉孔与托盘墩端面扫描纵坐标lift_middle_start_05=130。
托盘长度对应的像素个数tray_pixel_num_x=339。
S5:对符合托盘轮廓的标记进行判断。
根据步骤S3罗列的判定依据:
第一点,通过步骤S4中检测,可以确定托盘的长度和高度满足判定依据。
第二点,三个托盘墩是否位于同一平面,可由步骤S406中的标志lift_middle_start_05_flag是否等于4来判定。
第三点,叉孔与相邻托盘墩的深度差值大于20cm,且根据偏转角进行修正。
根据偏转角修正偏差值,主要是因为托盘大角度偏转时,叉孔的成像到托盘墩侧壁,深度显著变化导致。修正可以根据偏转角设定比例系数实现。
第四点,三个托盘墩和叉孔的尺寸测量。根据步骤S4中统计的叉孔起点与终点,可以计算托盘墩对应的像素个数和叉孔对应的像素个数。通过起始点深度值和像素间隔计算式:
可以计算得到像素间隔实际距离,乘以像素个数就得到实际尺寸信息。同理托盘大偏转可能带来的变形,按照最小0.7倍,最大1.4倍标准托盘尺寸进行判断。
若以上均满足,则检测到的为真实托盘。检测结束,进入下一步,输出偏转角和水平偏差值。
S6:计算托盘平面相对相机平面的偏转角度和托盘中心与相机中心X轴偏差值。
计算偏转角度:选定托盘左右两个托盘墩同一横坐标的两个点,采用反三角函数计算托盘的偏转角度。为了拟制抖动的影响,可选3*3或者9*9个点进行空间域滤波,然后再进行时域滤波得到稳定的深度值。
计算相机中心与托盘中心的水平偏差,在得到的左右两个托盘边沿的轮廓的基础上,在使用深度扫描,确定精确边界位置,排除因光线和角度造成的灰度边沿轮廓偏移的问题。然后根据中心距左右边界的像素个数差,以及中心对应的像素间隔计算水平偏移。
然后输出偏转角度和水平偏差。
应理解,实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。
Claims (10)
1.一种基于深度相机的托盘识别方法,其特征在于,包括以下步骤:
S1:相机获取关于托盘的包含深度图与灰度图的图像帧数据流;
S2:设置扫描方式以及扫描算子像素大小,对灰度图中的托盘进行轮廓扫描,并对托盘的轮廓线进行标记;
S3:归纳常见托盘形状、尺寸以及实际使用中托盘与相机偏转角度,确定托盘判定依据;
S4:对已标记过轮廓线的灰度图进行图像扫描,寻找符合托盘轮廓的标记位置;
S5:对符合托盘轮廓的标记进行判断;
S6:计算托盘平面相对相机平面的偏转角度和托盘中心与相机中心X轴偏差值。
2.根据权利要求1所述的一种基于深度相机的托盘识别方法,其特征在于,选择左右扫描方式,设置扫描算子像素大小;
对灰度图的亮度进行扫描,设定亮度阈值,根据像素亮度变化比例进行灰度图的像素点扫描和标记。
3.根据权利要求1所述的一种基于深度相机的托盘识别方法,其特征在于,所述的托盘判定依据包括:
托盘长度阈值范围、托盘高度阈值范围;
判断托盘墩数量且托盘墩位于同一平面,根据偏转角确定深度差值;
确定插孔与相邻托盘墩之间的深度差值,并基于偏转角进行修正;
对托盘墩和插孔尺寸的测量。
4.根据权利要求1所述的一种基于深度相机的托盘识别方法,其特征在于,所述的步骤S4具体包括以下过程:
S401:根据垂直轮廓点确认起点,计算托盘对应像素个数;
S402:计算托盘偏转角及托盘左右两边的深度差值;
S403:使用轮廓跟踪,统计托盘长对应的实际像素个数;
S404:扫描托盘墩和托盘叉孔的像素个数;
S405:计算托盘右边沿高度对应的像素个数及其起点坐标;
S406:根据托盘长度像素个数和计算得到的右侧高度像素个数,扫描右侧边沿。
5.根据权利要求4所述的一种基于深度相机的托盘识别方法,其特征在于,所述的确认起点的过程包括:
A:根据经验值满足连续若干点为标记点的,确定居中的点为起点;
B:以起点坐标开始,判断垂直方向连续30个像素灰度值和是否大于灰度阈值,若是,则进入下一步,否则返回上一步;
C:根据视场角和分辨率计算深度d处的像素间隔,并根据托盘高度范围计算托盘对应像素个数。
7.根据权利要求5所述的一种基于深度相机的托盘识别方法,其特征在于,还包括相机视场边沿畸变导致的成像变形处理;
设置最大偏移阈值offset_detect;
判断灰度图的ir_temp[i][j+offset_detect]灰度值是否为标记值;若是,则判断下一个点ir_temp[i+1][j+offset_detect],否则offset_detect加1;
向右偏移一个像素点ir_temp[i][j+offset_detect]判断灰度值是否为标记值;若是判断下一个点,否则向左偏移一个点ir_temp[i][j-offset_detect]继续判断;
如果左右各偏移1个像素仍不是标记点,则该横坐标得灰度值即为0;如此循环,直至纵坐标从i到i+Xn_lift统计完毕。
9.根据权利要求5所述的一种基于深度相机的托盘识别方法,其特征在于,根据托盘三个托盘墩位于同一平面的特点,按照托盘墩端面相对深度斜率一致性进行扫描,来分别标记托盘墩和叉孔,并统计对应像素个数和中点坐标作为下一步托盘识别依据;
首先对起点进行3*3空间域滤波;
然后计算基准斜率,选择若干点分别计算其与基准点的斜率,并计算斜率的均值Kp作为判断依据;
设定斜率判断阈值,纵坐标不变,横坐标累加,从左到右依次扫描,当扫描点与基准点斜率,与斜率的均值Kp的差值小于0.5标记为4005,否则标记为1000;
最后,在基于斜率扫描标记完成之后,重复扫描轨迹,统计托盘墩与叉孔的横坐标,并计算左侧叉孔,托盘中心,右侧叉孔对应的横坐标,作为托盘识别的判定依据。
10.根据权利要求5所述的一种基于深度相机的托盘识别方法,其特征在于,根据托盘左侧深度值和偏转角度,计算与右侧边沿的差值,在左侧托盘深度值上减去该差值即为右侧托盘对应的深度值,该值除像素间隔得到托盘右边沿对应的像素个数Xn_right。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210059418.4A CN114078220B (zh) | 2022-01-19 | 2022-01-19 | 一种基于深度相机的托盘识别方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210059418.4A CN114078220B (zh) | 2022-01-19 | 2022-01-19 | 一种基于深度相机的托盘识别方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114078220A true CN114078220A (zh) | 2022-02-22 |
CN114078220B CN114078220B (zh) | 2022-05-27 |
Family
ID=80284712
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210059418.4A Active CN114078220B (zh) | 2022-01-19 | 2022-01-19 | 一种基于深度相机的托盘识别方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114078220B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117496189A (zh) * | 2024-01-02 | 2024-02-02 | 中国石油大学(华东) | 一种基于深度相机的矩形托盘孔识别方法及系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106052586A (zh) * | 2016-07-21 | 2016-10-26 | 中国科学院自动化研究所 | 基于机器视觉的石材大板表面轮廓尺寸获取系统及方法 |
KR20170092734A (ko) * | 2016-02-03 | 2017-08-14 | 한국기술교육대학교 산학협력단 | 컬러 정보를 이용한 팔레트 검출 방법, 및 무인 운송 로봇의 팔레트 적재 상태 인식용 비전 모듈 |
CN110580725A (zh) * | 2019-09-12 | 2019-12-17 | 浙江大学滨海产业技术研究院 | 一种基于rgb-d相机的箱体分拣方法及系统 |
CN111986185A (zh) * | 2020-08-25 | 2020-11-24 | 浙江工业大学 | 一种基于深度相机的托盘检测定位方法 |
CN112017240A (zh) * | 2020-08-18 | 2020-12-01 | 浙江大学 | 一种面向无人叉车的托盘识别定位方法 |
CN112070759A (zh) * | 2020-09-16 | 2020-12-11 | 浙江光珀智能科技有限公司 | 一种叉车托盘检测与定位方法及系统 |
CN113267180A (zh) * | 2021-06-10 | 2021-08-17 | 上海大学 | 一种基于3d深度视觉的agv叉车托盘定位及叉取方法 |
CN113409397A (zh) * | 2021-05-18 | 2021-09-17 | 杭州电子科技大学 | 一种基于rgbd相机的仓储托盘检测与定位方法 |
-
2022
- 2022-01-19 CN CN202210059418.4A patent/CN114078220B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20170092734A (ko) * | 2016-02-03 | 2017-08-14 | 한국기술교육대학교 산학협력단 | 컬러 정보를 이용한 팔레트 검출 방법, 및 무인 운송 로봇의 팔레트 적재 상태 인식용 비전 모듈 |
CN106052586A (zh) * | 2016-07-21 | 2016-10-26 | 中国科学院自动化研究所 | 基于机器视觉的石材大板表面轮廓尺寸获取系统及方法 |
CN110580725A (zh) * | 2019-09-12 | 2019-12-17 | 浙江大学滨海产业技术研究院 | 一种基于rgb-d相机的箱体分拣方法及系统 |
CN112017240A (zh) * | 2020-08-18 | 2020-12-01 | 浙江大学 | 一种面向无人叉车的托盘识别定位方法 |
CN111986185A (zh) * | 2020-08-25 | 2020-11-24 | 浙江工业大学 | 一种基于深度相机的托盘检测定位方法 |
CN112070759A (zh) * | 2020-09-16 | 2020-12-11 | 浙江光珀智能科技有限公司 | 一种叉车托盘检测与定位方法及系统 |
CN113409397A (zh) * | 2021-05-18 | 2021-09-17 | 杭州电子科技大学 | 一种基于rgbd相机的仓储托盘检测与定位方法 |
CN113267180A (zh) * | 2021-06-10 | 2021-08-17 | 上海大学 | 一种基于3d深度视觉的agv叉车托盘定位及叉取方法 |
Non-Patent Citations (3)
Title |
---|
RICHARD P. FRANK ET AL.: "The influence of tray type and other variables on the palatal depth of casts made from irreversible hydrocolloid impressions", 《THE JOURNAL OF PROSTHETIC DENTISTRY 》 * |
武文汉 等: "一种基于轮廓匹配的仓储机器人托盘检测方法", 《上海交通大学学报》 * |
王粲: "基于单目视觉的简单形状工件定位与抓取技术研究", 《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117496189A (zh) * | 2024-01-02 | 2024-02-02 | 中国石油大学(华东) | 一种基于深度相机的矩形托盘孔识别方法及系统 |
CN117496189B (zh) * | 2024-01-02 | 2024-03-22 | 中国石油大学(华东) | 一种基于深度相机的矩形托盘孔识别方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114078220B (zh) | 2022-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107014294B (zh) | 一种基于红外图像的接触网几何参数检测方法及系统 | |
US8457384B2 (en) | Universal counting and measurement system | |
CN108613630B (zh) | 基于图像处理技术的两线型管水准器气泡偏移量测量方法 | |
CN109801333B (zh) | 体积测量方法、装置、系统及计算设备 | |
CN111508027B (zh) | 摄像机外参标定的方法和装置 | |
CN102450005A (zh) | 校正目标检测装置、检测校正目标的校正目标检测方法以及用于校正目标检测装置的程序 | |
CN100452079C (zh) | 一种全自动汽车清洗中车辆模式识别的方法 | |
CN110823130A (zh) | 一种结构光3d视觉快速自动标定装置及方法 | |
CN114035584B (zh) | 机器人检测障碍物的方法、机器人以及机器人系统 | |
CN114078220B (zh) | 一种基于深度相机的托盘识别方法 | |
CN116342718B (zh) | 一种线激光3d相机的标定方法、装置、存储介质及设备 | |
CN111178193A (zh) | 一种车道线的检测方法、检测装置及计算机可读存储介质 | |
CN113096183A (zh) | 一种基于激光雷达与单目相机的障碍物检测与测量方法 | |
CN112802123A (zh) | 一种基于条纹虚拟靶标的双目线阵相机静态标定方法 | |
CN115953550A (zh) | 针对线结构光扫描的点云离群点剔除系统及方法 | |
CN112233063B (zh) | 一种大尺寸圆形物体的圆心定位方法 | |
CN209820423U (zh) | 用于激光平面空间方程快速标定的辅助标靶屏幕装置 | |
CN111308484B (zh) | 深度模组测距方法、装置、深度相机及移动终端 | |
CN114202548A (zh) | 一种叉车托盘的定位方法、装置、存储介质及电子设备 | |
CN113643385B (zh) | 基于深度相机的高度识别方法、系统、装置及存储介质 | |
CN111754583B (zh) | 一种车载三维激光雷达和相机外参联合标定的自动化方法 | |
CN113218361B (zh) | 摄像机测距方法及装置 | |
CN114387234A (zh) | 一种激光3d相机图像像素校正方法 | |
CN117496467A (zh) | 基于单目相机和3d lidar融合的异形车道线检测方法 | |
CN115830139A (zh) | 用于栈板识别的3dTOF相机快速标定方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |