机场行李提取中行李箱图像识别与旋转仿真

2020-03-31 11:10董景峰杨若怡周康康谢明江
物流技术 2020年2期
关键词:行李箱最值灰度

董景峰,杨若怡,周康康,谢明江

(东北林业大学 工程技术学院,黑龙江 哈尔滨 150040)

1 引言

随着国民经济的快速发展,人们对民用航空的需求也不断增长,与此同时,人们对航空服务质量的要求也越来越高,为人们提供安全、舒适的环境和服务是我们所倡导的[1]。21世纪以来,国内外对机场旅客与航站楼内部运营管理有一定的研究。像北京首都国际机场的任海平提出了APM线数字化管理工作平台的建设方案,并就首都机场自动旅客运输系统的设计原则、体系架构、构建步骤及实施效果进行阐述[2]。兰德隆与布朗交通技术针对国内大型机场航站楼排队时间过长、楼内空间不足、日益多元化的旅客出行需求等问题,介绍旅客流程的各个环节上国际先进机场航站楼使用的新技术及新理念,以提升旅客流程上的处理效率,满足不同旅客出行需求。

针对机场航站楼内航班到达后人们从行李输送传送带上领取行李现状,我们发现放置在传送带上的行李箱摆放不一,很多行李箱把手远离人们的身体。从传送带上拖拉行李时,往往因为把手离身体过远,导致人们的腰部或脊椎受损。针对此问题,本文提出了设计托运行李箱扫描识别旋转装置,可以将行李箱把手自动旋转至面向取箱者,从而避免旅行者取箱困难的产生和不必要的伤害,同时为旅行者提供更安全舒适的服务。

针对上述提出的设计,以市场调查销售量最高的拉杆式行李箱为例,经图像获取在Matlab 中进行设计。在图像预处理时,通过图像灰度处理、降噪处理、二值化处理[3],实现噪声抑制,突出图像目标特征。对于图像中行李箱定位方法,运用Matlab 软件中imcrop函数进行图像裁剪,减少算法的冗余度,针对行李箱轮廓进行有效提取,避免边缘信息丢失。利用imrotate 函数进行图像旋转,并输出旋转后的图像和旋转的角度。

综上所述,为了满足机场的高效运行、避免对乘机旅客造成不必要的伤害,我们提出了行李箱扫描、把手识别和旋转角度计算方法。总体思路是:首先将要识别的行李箱进行目标图像预处理,然后对行李箱把手进行坐标点的确定,最后进行角度计算。

2 行李箱自动识别旋转基本流程

该系统主要分为行李箱图像预处理和角度计算与旋转两大部分。

首先,对行李箱图像进行灰度处理,再运用中值滤波对灰度后的图像降噪,然后确定降噪后图像二值化的阈值,并对降噪后的图像进行二值化。确定像素值为0 时图像中行李箱轮廓的四个最值边缘点坐标,并根据这四个最值确定裁剪后的矩形图像在原始图像中左上角的坐标、裁剪图像后的宽度和长度。接着再次对剪切后的图像进行二值化处理,然后确定截切后的图像黑色出现的四个最值点的坐标,并判断最值出现的次数是否大于阈值。

(1)如果大于阈值则说明行李箱的中轴线与坐标轴平行或者垂直,然后根据最值出现次数最少的位置确定旋转角度为0°、90°、180°或者270°。

(2)如果小于阈值,则计算四个最值点围成四边形的边长,并判断第三长边的起点、终点的坐标值的大小情况,确定行李箱的摆放情况,然后再分别计算每一种情况需要旋转的角度。

利用imrotate 函数旋转,并输出旋转后的图像和旋转的角度。整体流程图如图1所示。

图1 整体流程图

3 图像预处理

针对一张摄像头拍摄的行李箱图像,如果不经过处理可能会存在着不必要或者多余的干扰信息,即图像噪声,它严重影响了图像的质量,并且会影响后续的旋转过程及结果。因此,在行李箱图像的角度计算和旋转之前要对图像进行预处理。

3.1 灰度处理

行李箱图像的色彩需要大量的存储空间,增加算法的冗余度,导致程序运行时间较长,并且行李箱的图像色彩不会影响图像的旋转结果。因此本文首先利用Matlab 中的rgb2gray 对行李箱图像进行灰度处理。rgb2gray采用的是对R(红色),G(绿色),B(蓝色)分量进行加权平均:0.298 9R+0.587 0G+0.114 0B。灰度后的图片对比如图2所示。

图2 图像灰度处理运行结果

具体代码如下:

rgb=imread('xlx');

imshow(rgb)

title('原图','fontname',宋体','FontSize',30);

I=rgb2gray(rgb);

imshow(I);

title('灰度图像','fontname','宋体','FontSize',30);

是 否

3.2 降噪处理

图像降噪的方法有:均值滤波器、自适应维纳滤波器、中值滤波器、形态学噪声滤除器、小波去噪等。图像中出现椒盐噪声会对旋转的结果产生严重的影响,因此必须要去除掉图像中的椒盐噪声,如果用普通的线性滤波器只能将其压低,而无法彻底消除。因此,中值滤波器作为非线性滤波器具有着明显的优势[4-5]。

中值滤波器是一种非线性平滑滤波器,其主要功能是让周围像素值的中值代替与周围像素灰度值差别较大的像素值,从而可以消除孤立的噪声点,所以中值滤波对于滤除图像的椒盐噪声非常有效;基本原理是把数字图像或数字序列中一点的值用该点邻域的中值代替,邻域称为窗,窗开的越大,输出的结果就越平滑,但也可能把有用的信号特征抹掉。所以窗的大小确定需要根据实际的信号特征来确定。窗一般为二维模板,一般为奇数行列的矩阵,也可以是不同的形状,如线状、圆形等。

然后将窗内的像素值按照大小进行排序,二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l ∈W)},其中,W 为窗,f(x,y),g(x,y)分别为原始图像和处理后图像。通过窗的滑动可以做到既去除噪声又能保护图像的边缘,从而获得降噪的效果。具体代码如下:

经过中值滤波降噪处理后的灰度图像与原灰度图像的对比如图3所示。

图3 图像降噪处理运行结果

3.3 图像二值化

接着对降噪后的图像进行二值化。图像二值化是将图像上像素点的灰度值设置为0 或255,目的是进一步减小多余数据量,使所要提取的图像特征更明显。二值化处理过程中,确定适当的阈值尤为重要,它将直接决定处理效果。由于本研究流程对获取的行李箱图像的处理速度和精确度要求都较高。传统平均值法、设定阈值法呈现效果并不理想,而双峰法[6]、最大熵阈值法[7-8]和大律法[9]都需要相当的计算时间,因此在确定阈值时利用graythresh函数,其功能是使用最大类间方差法[10-11]找到一个合适的阈值。利用这个阈值通常比人为设定的阈值能更好地把一张灰度图像转换为二值图像;最后,使用im2bw函数,将找到的阈值输入,就可转变成一个二值图。程序为:

level=graythresh(f);%f为降噪后的灰度图像

bw=im2bw(f,level);

将降噪后得图像二值化处理,运行结果如图4所示。

图4 图像二值化处理运行结果

3.4 图像剪裁

为确定图像中行李箱的位置及轮廓,通常采用边缘检测、形态学处理等方法。边缘检测的方法有很多,Roberts 算子[12]、Sobel 算子[13-14]、Prewitt 算子[15-16]在不同场合中有不同的优势。Roberts算子会丢失一部分边缘,而且受噪声的影响也较大;Sobel 算子和Prewitt算子虽然在边缘提取时速度快,但是会因为混合噪声的影响而误判,该系统运行环境复杂,因此并不适合。综上所述,边缘检测不适用于本研究过程,但为了方便进行图像旋转和角度计算,减少算法的冗余度,缩短角度计算的时间,需要运用Matlab软件中的imcrop 对图像进行剪切,该函数对图像中行李箱有效轮廓的自动截取,返回一个保留行李箱轮廓的最小矩形的剪裁区域。程序为:

[mmin,indexmmin]=min(m);

[mmax,indexmmax]=max(m);

[nmin,indexnmin]=min(n);

[nmax,indexnmax]=max(n);

f1=imcrop(f,[nmin,mmin,abs(nmax- nmin),abs(mmax-mmin)]);

其中,f表示需要进行切割的图像;(nmin,mmin)表示所要切割出的矩形图像在原始图像中左上角的坐标,|n max-nmin|为切割图像的宽度,|m max-mmin|为切割图像的高度。运行结果如图5所示。

图5 图像剪裁运行结果

4 角度计算与旋转

4.1 问题分析

在角度计算之前需要对剪切后的图像再次进行3.3 的二值化处理,即行李箱图像上所有像素组成一个0-1矩阵,其中1表示黑色像素。以图像的左上角像素为原点,矩阵行增大的方向为Y轴正方向,列增大的方向为X轴正方向,建立直角坐标系。设定行李箱把手在最上方时为靠近旅客的一侧,如图6所示。

图6 设定行李箱旋转后位置

行李箱的轮廓看作由若干个逆时针旋转的向量组成。对于一个随机摆放的行李箱,为确定旋转到图6所示位置所需要的角度,即将底边向量旋转到与X 轴反方向的位置,如图7 所示(图中空心箭头向量为行李箱底边向量)。

图7 行李箱向量轮廓示意图

经分析,通过获得行李箱图像的X值最大、最小,Y值最大、最小的四个点,可得到行李箱底边向量,即图8中的四个点。

据分析,行李箱摆放的情况不同,四个最值关键点出现的情况共有8种,将这四个点按照逆时针的方向连接可围成一个四边形,如图9所示。如果将四边形四条边向量的模按降序的方式排序,不难发现底边向量的模始终排在第3位。

对于行李箱的中轴线垂直或者平行坐标轴的情况,如图10所示,存在多个X最大、最小值,Y最大、最小值点。这时不能通过四个最值点连接成四边形来判断底边的向量,但可利用行李箱把手处的最值出现次数最少来判断行李箱的摆放情况。

图8 行李箱轮廓中的四个最值点

图9 八种最值出现情况

图10 行李箱中轴线平行坐标轴

4.2 算法设计

Step 1:找出图像中所有行李箱的点,即灰度值为0的点,然后用min,max 函数找出四个最值并返回最值所在的位置,代码如下:

[y,x]=find(f2(:,:)==0);

[ymin,indexymin]=min(y);

[ymax,indexymax]=max(y);

[xmin,indexxmin]=min(x);

[xmax,indexxmax]=max(x);

Step 2:利用find 函数确定每一个最值出现的次数,并将这些最值出现的次数写入向量A,然后求出向量A所有元素的和,即为四个最值出现的总次数T。然后根据总次数T 是否大于阈值φ来判断行李箱的中轴线是否与坐标轴平行。φ值过大会导致即使行李箱中轴线与坐标轴平行,但还是按照不平行计算,增加算法的复杂度。行李箱任意摆放时,每个最值都可能出现多次,φ值过小会导致将任意摆放的行李箱按照中轴线与坐标轴平行来计算,增大算法的错误率。因此,必须确定一个合适的φ值,经过大量实验,φ=100 时算法能够实现理想的效果。具体代码如下:

numymin=find(y==ymin);

numymax=find(y==ymax);

numxmin=find(x==xmin);

numxmax=find(x==xmax);

A=[length(numymin),length(numxmin),length(numymax),length(numxmax)];

T=sum(A);

Step 3:当最值出现的总次数T大于阈值φ时,用min 函数确定向量A中的最小值a,若Y的最小值出现的次数为a,即时,需要旋转的角度α=0o。

同理:

代码如下:

Step 4:当最值出现的总次数T 小于阈值φ时,将出现ymin值时对应的像素坐标(xy=ymin,ymin)(y=ymin即为Step 1 中min,max 函数返回的最值所在的位置)和(xmax,yx=xmax),(xy=ymax,ymax),(xmin,yx=xmin)按顺序写入坐标向量E,因为这四个点围成的是封闭四边形,为了方便计算可以再将第一个点写在向量的末尾构成一个循环封闭的向量。然后顺序计算每两个相邻点之间的距离并写入距离向量D,即图11 中的(x1,y1)→(x2,y2) 为 D1, (x2,y2)→(x3,y3) 为 D2,(x3,y3)→(x4,y4)为D3,(x4,y4)→(x1,y1)为D4。然后将向量D按降序的方式排序,并确定第三长的线段,即行李箱底边在原来距离向量D 中的位置i(i=1,2,3,4)。此时行李箱底边向量的起点坐标(x1=E2i-1,y1=E2i);终点坐标(x2=E2i+1,y2=E2i+2)。接着用这两个坐标判断行李箱的摆放情况,如图11所示。

图11 端点坐标确定示意图

根据以上四种情况,利用三角函数进行旋转角度的计算,其角度判断过程如下:

代码如下:

4.3 图像旋转

行李箱图像的旋转运用的是Matlab 函数库中的imrorate函数,该函数的调用格式有三种形式:

将图像的数据矩阵P 绕图像中心点旋转angle度,设置图像逆时针旋转为正,顺时针旋转为负,返回旋转后的图像矩阵。

使用参数method可以改变插值算法,参数method可以为下面这三个值:

'nearest':最邻近线性插值(Nearest-neighbor interpolation)

'bilinear':双线性插值(Bilinear interpolation)

'bicubic':双立方插值(Bicubic interpolation)

Q=imrotate(P,angle,method,bbox)

bbox参数用于指定输出图像属性:

'crop':对旋转后的图像Q进行裁剪,保持旋转后输出的图像Q的尺寸和输入图像P的尺寸一致。

'loose':使输出的图像足够大,以保证源图像旋转后超出图像尺寸范围的情况下,防止像素值丢失。上文已经求出任意行李箱应该旋转的角度,所以本文采用第一种调用格式,并输出需要旋转的角度α,最后输出旋转后的图像。具体代码如下:

B=imrotate(f, angle);

Disp(['需要逆时针旋转的角度为:',num2str(angle),'°'])

imshow(B);

title('旋转后的图像');

5 运行结果

针对行李箱不同的四种摆放情况,本文给出了各自的运行结果,如图12所示(图中的旋转角度为逆时针旋转所需的角度)。由图可知,本系统可以实现将行李箱把手旋转到靠近人的一侧,虽然在旋转时具有一定的误差,但可以忽略不计,并不影响正常的使用。

图12 运行情况

6 结束语

本文利用Matlab 仿真,对行李箱进行了图像灰度处理、中值滤波降噪处理、图像二值化,并用imcrop函数进行图像裁剪等,该方法解决了行李箱边缘轮廓提取的问题。然后运用数学三角函数求得行李箱所需旋转的角度,最后运用imrotate 函数实现图像的旋转。通过改造航站楼行李提取输送设备及其控制系统,应用本文提出的方法进行摄像头扫描行李箱图像并进行识别和计算旋转角度,继而由控制系统实现可旋转平台旋转。其可以解决机场航站楼内因旅客行李积压给机场运行和旅客自身带来的不便,方便旅客快速提取行李箱。在物流和生产流通等其他环节也可运用以上过程实现原材料、成品、半成品等物资的高效率输送。

猜你喜欢
行李箱最值灰度
采用改进导重法的拓扑结构灰度单元过滤技术
单调任意恒成立,论参离参定最值
聚焦圆锥曲线中的最值问题
Bp-MRI灰度直方图在鉴别移行带前列腺癌与良性前列腺增生中的应用价值
数列中的最值题型例讲
Arduino小车巡线程序的灰度阈值优化方案
背起你的“行李箱”
Driver escapes through car boot
行李箱组合
The Psychology of the Suitcase