張洪濤, 張廣玉, 李隆球, 王林
(哈爾濱工業(yè)大學(xué) 機(jī)電工程學(xué)院,黑龍江 哈爾濱 150001)
光流的概念是Gibson于1950年首次提出的。感知心理學(xué)認(rèn)為,光流是源于觀測者和靜止環(huán)境之間相對運(yùn)動的一種圖像運(yùn)動[1]。因此,光流提供了觀察者全局運(yùn)動的主要信息,如自身運(yùn)動。通常,光流被定義為觀察者和非靜止環(huán)境之間的任何相對運(yùn)動引起的圖像運(yùn)動[2]。如果圖像保持靜止,圖像運(yùn)動直接與觀察者的自身運(yùn)動相關(guān)(或者直接反應(yīng)觀察者的運(yùn)動)。在這種情況下,觀察者不需要對環(huán)境中的單一物體進(jìn)行感知,而是將整個環(huán)境視為一種關(guān)于時(shí)間和空間的背景,由此可以感知自身運(yùn)動[3]。
光流傳感器是一種基于光流法對視覺運(yùn)動進(jìn)行測量并輸出測量值的視覺傳感器。按其結(jié)構(gòu)可分為2種:一種結(jié)構(gòu)是一個圖像傳感器芯片連接到一個運(yùn)行光流算法的微處理上,可稱為分體式光流傳感器[4];另一種結(jié)構(gòu)是將圖像傳感器和微處理器整合到一個視覺芯片上,可稱為一體式光流傳感器[5-7]。光流傳感器現(xiàn)已廣泛應(yīng)用于計(jì)算機(jī)領(lǐng)域的光電鼠標(biāo)中,作為測量光電鼠標(biāo)運(yùn)動的主要感應(yīng)元件。此外,光流傳感器也用于機(jī)器人領(lǐng)域中需要進(jìn)行視覺運(yùn)動測量和相對運(yùn)動感知的場合[8-9]。近年來,使用光流技術(shù)進(jìn)行飛行穩(wěn)定控制和避障也成為了無人飛行器研究領(lǐng)域的一個熱點(diǎn)問題[10-15]。
目前,分體式光流傳感器多采用圖像傳感器與FPGA相結(jié)合的方式,體積較大,不適用于對尺寸和重量有嚴(yán)格要求的場合(比如微型飛行器)。一體式光流傳感器尺寸小,但分辨率較低,對應(yīng)用環(huán)境要求較高,環(huán)境普適性較差。針對現(xiàn)有2種傳感器的不足,本文基于圖像插值算法[16],設(shè)計(jì)了一種尺寸小、重量輕、分辨率較高、環(huán)境適應(yīng)能力好的光流傳感器,該傳感器可以測量攝像頭相對靜止環(huán)境的自身二維平移。本文還對微型光流傳感器的硬件結(jié)構(gòu)和軟件流程進(jìn)行了介紹。
當(dāng)攝像頭與靜止的環(huán)境作相對運(yùn)動時(shí),可以假定攝像頭不動,而環(huán)境相對其運(yùn)動,如圖1所示。
圖1 環(huán)境平移引起的像素運(yùn)動
(1)
(2)
因此
(3)
其中,
(4)
(5)
當(dāng)環(huán)境點(diǎn)產(chǎn)生Δl的平移時(shí),其對應(yīng)的像點(diǎn)產(chǎn)生Δx的像素位移,如圖2所示。
圖2 環(huán)境平移引起的像素運(yùn)動
根據(jù)相似三角形原理可得
(6)
式中:f代表攝像頭焦距。由于環(huán)境各點(diǎn)與像平面的距離d不同,所以各點(diǎn)的像點(diǎn)像素位移也不同。將環(huán)境整體看作一個剛體,則所有環(huán)境點(diǎn)的位移均為Δl。所以
(7)
式中:N為圖像像素?cái)?shù)。特殊情況下,當(dāng)環(huán)境為近似平面(如地板、墻壁等)時(shí),各環(huán)境點(diǎn)與像平面的距離d均相同,因此對應(yīng)的像點(diǎn)的Δx也都相同,即Δx1=Δx2=…=ΔxN。整個圖像發(fā)生了Δx的位移,且圖像位移與環(huán)境位移成正比,當(dāng)環(huán)境相對靜止時(shí),則攝像頭的自身位移與圖像位移成正比,以下推算均假定環(huán)境為此種情況。
圖3 圖像及其參考圖像的相對位置
(8)
(9)
即令E對Δxt和Δyt的偏導(dǎo)數(shù)為0,可以得到
(10)
(11)
由式(10)、 (11)可以解得
(12)
其中,
(13)
實(shí)際應(yīng)用中,由于圖像噪聲、環(huán)境光照變化或者陰影等因素的影響,會使光流輸出值產(chǎn)生小幅度波動甚至大幅度突變。一般情況下,典型的圖像噪聲為單位亮度值,梯度越小的點(diǎn)受圖像噪聲影響越大,當(dāng)這些小梯度點(diǎn)參與光流計(jì)算時(shí),會使結(jié)果產(chǎn)生較大誤差。為了不受這些點(diǎn)的影響,可以在計(jì)算時(shí)設(shè)定一個梯度閾值,梯度小于此閾值的點(diǎn)不參與光流計(jì)算,即剔除極大誤差圖像點(diǎn)。
當(dāng)環(huán)境光照突變時(shí),圖像整體的亮度會增大或減小,在突變期間計(jì)算的光流值會產(chǎn)生一個大幅度波動。對于這種情況,一種方法是在檢測到光流突變時(shí)不進(jìn)行輸出,當(dāng)光流穩(wěn)定后再輸出。另一種方法是先對圖像進(jìn)行去直流成分處理,然后再進(jìn)行光流計(jì)算,這種方法把環(huán)境光照的突變看作是每個圖像點(diǎn)疊加了一個直流成分,破壞了亮度不變性假設(shè),引起了光流計(jì)算誤差,因此通過去直流成分的方法消除干擾。這種方法不關(guān)心環(huán)境亮度變化的幅度,適應(yīng)性更強(qiáng),并且去直流成分的操作不會改變圖像的梯度值,不會對光流計(jì)算帶來附加的影響。進(jìn)一步的,如果環(huán)境光照變化對圖像各部分的影響并不一致,可以使用局部亮度突變一致性假設(shè),對圖像進(jìn)行分塊去直流成分操作。
實(shí)際應(yīng)用中,使用梯度閾值與分塊去直流成分相結(jié)合的方法來克服圖像噪聲和環(huán)境光照變化。
使用USB攝像頭,在PC機(jī)上使用Matlab對上述算法進(jìn)行仿真,設(shè)置攝像頭分辨率為160×120。兩次實(shí)驗(yàn)中,攝像頭分別相對環(huán)境做平移和圓周運(yùn)動。程序連續(xù)采集圖像并對相鄰幀計(jì)算光流。從視頻流中抽取連續(xù)的10幀圖像,如圖4所示。
(a) 水平運(yùn)動
(b) 圓周運(yùn)動
圖中用向量表示當(dāng)前幀相對于前一幀的光流大小和方向,結(jié)果表明光流向量正確的反映了攝像頭自身的運(yùn)動方向,在室內(nèi)環(huán)境下算法運(yùn)行良好,無需人為設(shè)置特殊的紋理背景。
光流傳感器采用分體式結(jié)構(gòu),圖像傳感器使用OV7670攝像頭模組,尺寸21 mm×12.5 mm,鏡頭焦距4.49 mm,視場角67°,像素640×480。處理器使用STM32F207VGT6,集成一個數(shù)字?jǐn)z像頭接口(DCMI),可以方便地與OV7670進(jìn)行連接。其128 kB的RAM可以存儲2張QCIF (176×144像素)格式的彩色圖像,無需外擴(kuò)數(shù)據(jù)存儲器,有利于微型化設(shè)計(jì)。120 MHz的時(shí)鐘頻率和150DMIPS的運(yùn)算能力滿足實(shí)時(shí)光流計(jì)算的需求。光流傳感器的主要硬件接口電路如圖5所示。
圖5 光流傳感器主要硬件接口電路
圖6 光流傳感器
光流傳感器工作流程如下:首先獲取一幅QCIF格式的圖像,然后使用模板尺度為5×5的高斯濾波器進(jìn)行濾波,去除圖像噪聲,再使用分塊去直流成分與梯度閾值相結(jié)合的方式來消除干擾。如果采集的是第一幅圖像,則使用式(13)計(jì)算a、b和d,否則計(jì)算c和e,然后使用式(12)進(jìn)行光流計(jì)算,這里Δp設(shè)定為1個像素。然后更新計(jì)算a、b和d,再進(jìn)行下一幅圖像的采集。為了防止應(yīng)用中不利因素(如圖像抖動等)引起的光流突變,將光流計(jì)算值經(jīng)過低通濾波后再輸出。光流輸出頻率為30 Hz,滿足低速運(yùn)動環(huán)境的需求。光流傳感器尺寸為30 mm×25 mm,質(zhì)量2.9 g,實(shí)物如圖6所示。
使用自行研制的微型四旋翼飛行器為實(shí)驗(yàn)平臺,如圖7(a)所示。該飛行器最大尺寸16.5 cm,重量約35 g,最大載荷5 g,由于載荷的限制無法使用常規(guī)的光流傳感器進(jìn)行輔助懸停控制。實(shí)驗(yàn)在室內(nèi)自然光照環(huán)境下進(jìn)行,光流傳感器面向地面,地面為帶有紋理的普通木質(zhì)地板,如圖7(b)所示。
圖7 微型飛行器及實(shí)驗(yàn)環(huán)境
實(shí)驗(yàn)中,首先通過手動遙控使微型飛行器達(dá)到指定位置,然后向其發(fā)送指令,使其進(jìn)入光流傳感器輔助的自主懸停模式。在該模式下,飛行器的高度由超聲波測量并鎖定;偏航方向的旋轉(zhuǎn)被偏航陀螺和電子羅盤鎖定。這樣,飛行器在三維空間中只能進(jìn)行前后方向和左右方向的漂移運(yùn)動。為了對漂移進(jìn)行抑制,飛行器的主控制器首先通過串口從光流模塊獲取代表圖像運(yùn)動的二維光流信息,然后根據(jù)飛行高度,由式(6)計(jì)算出飛行器的絕對漂移量。此漂移量作為飛行器位置控制環(huán)的輸入,通過一個PID控制器來調(diào)整飛行器的運(yùn)動方向,以實(shí)現(xiàn)目標(biāo)漂移量為零。飛行器正面安裝了一個紅色發(fā)光二極管,通過雙目測距法對圖像中的紅色目標(biāo)進(jìn)行跟蹤,以實(shí)時(shí)監(jiān)測飛行器的位置漂移情況。實(shí)驗(yàn)中懸停高度為1 m,懸停時(shí)間為60 s,飛行器相對設(shè)定懸停位置的漂移量如圖8所示,前后方向和左右方向的最大位置漂移量均小于20 cm,基本滿足狹小環(huán)境下的懸停精度要求。
圖8 飛行器懸停漂移量
本文提出了基于圖像插值的二維光流計(jì)算方法,使用梯度閾值與分塊去除亮度直流成分相結(jié)合的方法來克服圖像噪聲和環(huán)境光照變化,通過仿真驗(yàn)證了算法的可行性。給出了微型光流傳感器的設(shè)計(jì)方法。在微型四旋翼飛行器平臺上進(jìn)行了自主懸停實(shí)驗(yàn),結(jié)果表明飛行器懸停的位置誤差小于20 cm,光流傳感器輔助位置控制的效果較好。與常規(guī)的光流傳感器相比,該傳感器尺寸小重量輕,環(huán)境適應(yīng)能力較強(qiáng),適用于一般要求的輔助位置控制,尤其適用于微型的機(jī)器人和飛行器平臺。
參考文獻(xiàn):
[1]KOENDERINK J. Optic flow[J]. Vision Research, 1986, 26(1): 161-180.
[2]HORN B, SCHUNCK B. Determining optical flow[J]. Artificial Intelligence, 1981, 17: 185-203.
[3]SUNDARESWARAN V. Egomotion from global flow field data[C]//Proceedings of the IEEE Workshop on Visual Motion. Los Alamitos, USA, 1991: 140-145.
[4]WEI Z, LEE D, NELSON B. FPGA-based real-time optical flow algorithm design and implementation[J]. Journal of Multimedia, 2007, 2(5): 38-45.
[5]BARROWS G, NEELY C. Mixed-mode VLSI optic flow sensors for in-flight control of a micro air vehicle[C]// Proceedings of the SPIE 45th Annual Meeting. San Diego, USA, 2000: 52-63.
[6]STOCKER A. Analog integrated 2-D optical flow sensor[J]. Analog Integrated Circuits and Signal Processing, 2006, 46: 121-138.
[7]STOCKER A, DOUGLAS R. Analog integrated 2-D optical flow sensor with programmable pixels[C]//International Symposium on Circuits and System. Vancouver, Canada, 2004: 121-138.
[8]LEE S, SONG J. Mobile robot localization using optical flow sensors[J]. International Journal of Control, Automation and Systems, 2004, 2(4): 485-493.
[9]STOFFLER N, FARBER G. An MPEG-processor-based robot vision system for real-time detection of moving object by a moving observer[C]//Proceedings of 14th International Conference on Pattern Recognition. Washington, USA, 1998: 477-481.
[10]KHALIL F, PAYEUR P. Optical flow techniques in biomimetic UAV vision[C]//IEEE International Workshop on Robotic and Sensors Environments. Ottawa, Canada, 2005: 14-19.
[11]ROMERO H, SALAZAR S, LOZANO R. Real-time stabilization of an eight-rotor UAV using optical flow [J]. IEEE Transactions on Robotics, 2009, 25(4): 809-817.
[12]HERISSE B, RUSSOTTO F, HAMEL T, et al. Hovering flight and vertical landing control of VTOL unmanned aerial vehicle using optical flow[C]//IEEE/RSJ International Conference on Intelligent Robots and Systems. Nice, France, 2008: 801-806.
[13]REZAEI M, SAGHAFI F.Optical flow-based obstacle avoidance of a fixed-wing MAV[J]. Aircraft Engineering and Aerospace Technology, 2011, 83(2): 85-93.
[14]RUFFIER F, FRANCESCHINI N. Optical flow regulation: the key to aircraft automatic guidance[J]. Robotics and Autonomous Systems, 2005, 50(4): 177-194.
[15]ZINGG S, SCARAMUZZA D, WEISS S, et al. MAV navigation through indoor corridors using optical flow[C]//IEEE International Conference on Robotics and Automation. Anchorage, USA, 2010: 3361-3368.
[16]SRINIVASAN M V. An image-interpolation technique for the computation of optic flow and egomotion[J]. Biological Cybernetics, 1994, 71(5): 401-415.
[17]FENNEMA C, Thompson W. Velocity determination in scenes containing several moving objects[J]. Computer Graphics and Image Processing, 1979, 9: 301-315.