董景峰,楊若怡,周康康,謝明江
(東北林業(yè)大學 工程技術學院,黑龍江 哈爾濱 150040)
隨著國民經濟的快速發(fā)展,人們對民用航空的需求也不斷增長,與此同時,人們對航空服務質量的要求也越來越高,為人們提供安全、舒適的環(huán)境和服務是我們所倡導的[1]。21世紀以來,國內外對機場旅客與航站樓內部運營管理有一定的研究。像北京首都國際機場的任海平提出了APM線數字化管理工作平臺的建設方案,并就首都機場自動旅客運輸系統的設計原則、體系架構、構建步驟及實施效果進行闡述[2]。蘭德隆與布朗交通技術針對國內大型機場航站樓排隊時間過長、樓內空間不足、日益多元化的旅客出行需求等問題,介紹旅客流程的各個環(huán)節(jié)上國際先進機場航站樓使用的新技術及新理念,以提升旅客流程上的處理效率,滿足不同旅客出行需求。
針對機場航站樓內航班到達后人們從行李輸送傳送帶上領取行李現狀,我們發(fā)現放置在傳送帶上的行李箱擺放不一,很多行李箱把手遠離人們的身體。從傳送帶上拖拉行李時,往往因為把手離身體過遠,導致人們的腰部或脊椎受損。針對此問題,本文提出了設計托運行李箱掃描識別旋轉裝置,可以將行李箱把手自動旋轉至面向取箱者,從而避免旅行者取箱困難的產生和不必要的傷害,同時為旅行者提供更安全舒適的服務。
針對上述提出的設計,以市場調查銷售量最高的拉桿式行李箱為例,經圖像獲取在Matlab 中進行設計。在圖像預處理時,通過圖像灰度處理、降噪處理、二值化處理[3],實現噪聲抑制,突出圖像目標特征。對于圖像中行李箱定位方法,運用Matlab 軟件中imcrop函數進行圖像裁剪,減少算法的冗余度,針對行李箱輪廓進行有效提取,避免邊緣信息丟失。利用imrotate 函數進行圖像旋轉,并輸出旋轉后的圖像和旋轉的角度。
綜上所述,為了滿足機場的高效運行、避免對乘機旅客造成不必要的傷害,我們提出了行李箱掃描、把手識別和旋轉角度計算方法??傮w思路是:首先將要識別的行李箱進行目標圖像預處理,然后對行李箱把手進行坐標點的確定,最后進行角度計算。
該系統主要分為行李箱圖像預處理和角度計算與旋轉兩大部分。
首先,對行李箱圖像進行灰度處理,再運用中值濾波對灰度后的圖像降噪,然后確定降噪后圖像二值化的閾值,并對降噪后的圖像進行二值化。確定像素值為0 時圖像中行李箱輪廓的四個最值邊緣點坐標,并根據這四個最值確定裁剪后的矩形圖像在原始圖像中左上角的坐標、裁剪圖像后的寬度和長度。接著再次對剪切后的圖像進行二值化處理,然后確定截切后的圖像黑色出現的四個最值點的坐標,并判斷最值出現的次數是否大于閾值。
(1)如果大于閾值則說明行李箱的中軸線與坐標軸平行或者垂直,然后根據最值出現次數最少的位置確定旋轉角度為0°、90°、180°或者270°。
(2)如果小于閾值,則計算四個最值點圍成四邊形的邊長,并判斷第三長邊的起點、終點的坐標值的大小情況,確定行李箱的擺放情況,然后再分別計算每一種情況需要旋轉的角度。
利用imrotate 函數旋轉,并輸出旋轉后的圖像和旋轉的角度。整體流程圖如圖1所示。
圖1 整體流程圖
針對一張攝像頭拍攝的行李箱圖像,如果不經過處理可能會存在著不必要或者多余的干擾信息,即圖像噪聲,它嚴重影響了圖像的質量,并且會影響后續(xù)的旋轉過程及結果。因此,在行李箱圖像的角度計算和旋轉之前要對圖像進行預處理。
行李箱圖像的色彩需要大量的存儲空間,增加算法的冗余度,導致程序運行時間較長,并且行李箱的圖像色彩不會影響圖像的旋轉結果。因此本文首先利用Matlab 中的rgb2gray 對行李箱圖像進行灰度處理。rgb2gray采用的是對R(紅色),G(綠色),B(藍色)分量進行加權平均:0.298 9R+0.587 0G+0.114 0B?;叶群蟮膱D片對比如圖2所示。
圖2 圖像灰度處理運行結果
具體代碼如下:
rgb=imread('xlx');
imshow(rgb)
title('原圖','fontname',宋體','FontSize',30);
I=rgb2gray(rgb);
imshow(I);
title('灰度圖像','fontname','宋體','FontSize',30);
是 否
圖像降噪的方法有:均值濾波器、自適應維納濾波器、中值濾波器、形態(tài)學噪聲濾除器、小波去噪等。圖像中出現椒鹽噪聲會對旋轉的結果產生嚴重的影響,因此必須要去除掉圖像中的椒鹽噪聲,如果用普通的線性濾波器只能將其壓低,而無法徹底消除。因此,中值濾波器作為非線性濾波器具有著明顯的優(yōu)勢[4-5]。
中值濾波器是一種非線性平滑濾波器,其主要功能是讓周圍像素值的中值代替與周圍像素灰度值差別較大的像素值,從而可以消除孤立的噪聲點,所以中值濾波對于濾除圖像的椒鹽噪聲非常有效;基本原理是把數字圖像或數字序列中一點的值用該點鄰域的中值代替,鄰域稱為窗,窗開的越大,輸出的結果就越平滑,但也可能把有用的信號特征抹掉。所以窗的大小確定需要根據實際的信號特征來確定。窗一般為二維模板,一般為奇數行列的矩陣,也可以是不同的形狀,如線狀、圓形等。
然后將窗內的像素值按照大小進行排序,二維中值濾波輸出為g(x,y)=med{f(x-k,y-l),(k,l ∈W)},其中,W 為窗,f(x,y),g(x,y)分別為原始圖像和處理后圖像。通過窗的滑動可以做到既去除噪聲又能保護圖像的邊緣,從而獲得降噪的效果。具體代碼如下:
經過中值濾波降噪處理后的灰度圖像與原灰度圖像的對比如圖3所示。
圖3 圖像降噪處理運行結果
接著對降噪后的圖像進行二值化。圖像二值化是將圖像上像素點的灰度值設置為0 或255,目的是進一步減小多余數據量,使所要提取的圖像特征更明顯。二值化處理過程中,確定適當的閾值尤為重要,它將直接決定處理效果。由于本研究流程對獲取的行李箱圖像的處理速度和精確度要求都較高。傳統平均值法、設定閾值法呈現效果并不理想,而雙峰法[6]、最大熵閾值法[7-8]和大律法[9]都需要相當的計算時間,因此在確定閾值時利用graythresh函數,其功能是使用最大類間方差法[10-11]找到一個合適的閾值。利用這個閾值通常比人為設定的閾值能更好地把一張灰度圖像轉換為二值圖像;最后,使用im2bw函數,將找到的閾值輸入,就可轉變成一個二值圖。程序為:
level=graythresh(f);%f為降噪后的灰度圖像
bw=im2bw(f,level);
將降噪后得圖像二值化處理,運行結果如圖4所示。
圖4 圖像二值化處理運行結果
為確定圖像中行李箱的位置及輪廓,通常采用邊緣檢測、形態(tài)學處理等方法。邊緣檢測的方法有很多,Roberts 算子[12]、Sobel 算子[13-14]、Prewitt 算子[15-16]在不同場合中有不同的優(yōu)勢。Roberts算子會丟失一部分邊緣,而且受噪聲的影響也較大;Sobel 算子和Prewitt算子雖然在邊緣提取時速度快,但是會因為混合噪聲的影響而誤判,該系統運行環(huán)境復雜,因此并不適合。綜上所述,邊緣檢測不適用于本研究過程,但為了方便進行圖像旋轉和角度計算,減少算法的冗余度,縮短角度計算的時間,需要運用Matlab軟件中的imcrop 對圖像進行剪切,該函數對圖像中行李箱有效輪廓的自動截取,返回一個保留行李箱輪廓的最小矩形的剪裁區(qū)域。程序為:
[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 圖像剪裁運行結果
在角度計算之前需要對剪切后的圖像再次進行3.3 的二值化處理,即行李箱圖像上所有像素組成一個0-1矩陣,其中1表示黑色像素。以圖像的左上角像素為原點,矩陣行增大的方向為Y軸正方向,列增大的方向為X軸正方向,建立直角坐標系。設定行李箱把手在最上方時為靠近旅客的一側,如圖6所示。
圖6 設定行李箱旋轉后位置
行李箱的輪廓看作由若干個逆時針旋轉的向量組成。對于一個隨機擺放的行李箱,為確定旋轉到圖6所示位置所需要的角度,即將底邊向量旋轉到與X 軸反方向的位置,如圖7 所示(圖中空心箭頭向量為行李箱底邊向量)。
圖7 行李箱向量輪廓示意圖
經分析,通過獲得行李箱圖像的X值最大、最小,Y值最大、最小的四個點,可得到行李箱底邊向量,即圖8中的四個點。
據分析,行李箱擺放的情況不同,四個最值關鍵點出現的情況共有8種,將這四個點按照逆時針的方向連接可圍成一個四邊形,如圖9所示。如果將四邊形四條邊向量的模按降序的方式排序,不難發(fā)現底邊向量的模始終排在第3位。
對于行李箱的中軸線垂直或者平行坐標軸的情況,如圖10所示,存在多個X最大、最小值,Y最大、最小值點。這時不能通過四個最值點連接成四邊形來判斷底邊的向量,但可利用行李箱把手處的最值出現次數最少來判斷行李箱的擺放情況。
圖8 行李箱輪廓中的四個最值點
圖9 八種最值出現情況
圖10 行李箱中軸線平行坐標軸
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,因為這四個點圍成的是封閉四邊形,為了方便計算可以再將第一個點寫在向量的末尾構成一個循環(huán)封閉的向量。然后順序計算每兩個相鄰點之間的距離并寫入距離向量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 端點坐標確定示意圖
根據以上四種情況,利用三角函數進行旋轉角度的計算,其角度判斷過程如下:
代碼如下:
行李箱圖像的旋轉運用的是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('旋轉后的圖像');
針對行李箱不同的四種擺放情況,本文給出了各自的運行結果,如圖12所示(圖中的旋轉角度為逆時針旋轉所需的角度)。由圖可知,本系統可以實現將行李箱把手旋轉到靠近人的一側,雖然在旋轉時具有一定的誤差,但可以忽略不計,并不影響正常的使用。
圖12 運行情況
本文利用Matlab 仿真,對行李箱進行了圖像灰度處理、中值濾波降噪處理、圖像二值化,并用imcrop函數進行圖像裁剪等,該方法解決了行李箱邊緣輪廓提取的問題。然后運用數學三角函數求得行李箱所需旋轉的角度,最后運用imrotate 函數實現圖像的旋轉。通過改造航站樓行李提取輸送設備及其控制系統,應用本文提出的方法進行攝像頭掃描行李箱圖像并進行識別和計算旋轉角度,繼而由控制系統實現可旋轉平臺旋轉。其可以解決機場航站樓內因旅客行李積壓給機場運行和旅客自身帶來的不便,方便旅客快速提取行李箱。在物流和生產流通等其他環(huán)節(jié)也可運用以上過程實現原材料、成品、半成品等物資的高效率輸送。