《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于嵌入式Linux的雙目測距系統(tǒng)研究
基于嵌入式Linux的雙目測距系統(tǒng)研究
2015年微型機與應(yīng)用第5期
謝永超,,王進華
(福州大學(xué) 電氣工程與自動化學(xué)院,,福建 福州 350108)
摘要: 根據(jù)嵌入式系統(tǒng)的特點,設(shè)計了以ARM為核心的雙目立體視覺測距系統(tǒng),。系統(tǒng)使用雙目立體攝像頭采集圖像數(shù)據(jù),,可設(shè)置圖像的多種屬性,。利用開源計算機視覺庫OpenCV對采集的圖像數(shù)據(jù)進行處理,分別完成了兩臺攝像機標(biāo)定,、匹配,、重建等工作,最后實現(xiàn)攝像機測距功能,。實驗結(jié)果表明,,該系統(tǒng)測量結(jié)果合理,工作穩(wěn)定,,同時可用Qt/Embedded實時顯示圖像和數(shù)據(jù),,具有良好的人機交互功能和跨平臺移植性。
Abstract:
Key words :

  摘  要: 根據(jù)嵌入式系統(tǒng)的特點,,設(shè)計了以ARM為核心的雙目立體視覺測距系統(tǒng),。系統(tǒng)使用雙目立體攝像頭采集圖像數(shù)據(jù),可設(shè)置圖像的多種屬性,。利用開源計算機視覺庫OpenCV對采集的圖像數(shù)據(jù)進行處理,,分別完成了兩臺攝像機標(biāo)定、匹配,、重建等工作,,最后實現(xiàn)攝像機測距功能。實驗結(jié)果表明,,該系統(tǒng)測量結(jié)果合理,,工作穩(wěn)定,同時可用Qt/Embedded實時顯示圖像和數(shù)據(jù),,具有良好的人機交互功能和跨平臺移植性,。

  關(guān)鍵詞: 嵌入式;計算機視覺庫,;立體視覺,;雙目測距

0 引言

  雙目立體視覺測距是計算機視覺技術(shù)中的一個分支,也是計算機視覺研究的重點和熱點之一,。它通過雙攝像機模擬人眼的功能,,對三維世界進行立體感知,恢復(fù)物體的三維幾何信息,。隨著機器視覺理論的發(fā)展,,雙目立體視覺在機器視覺研究中發(fā)揮了越來越來越重要的作用,具有廣泛的適用性[1]。

  嵌入式ARM因處理速度快,、使用方便,、操作系統(tǒng)開源等特點而廣泛應(yīng)用。目前,,雙目視覺系統(tǒng)多是基于PC平臺實現(xiàn)[2],而在嵌入式系統(tǒng)中,,因其屏幕尺寸,、處理速度等硬件資源受到限制,測距系統(tǒng)的實現(xiàn)具有新特點,。本文以嵌入式處理器作為硬件核心,,構(gòu)建基于嵌入式系統(tǒng)的雙目測距系統(tǒng),并具有圖像的實時顯示功能,。

1 雙目測距原理

  1.1 攝像機模型

001.jpg

  攝像機的針孔模型如圖1所示,,攝像機之外物體X通過穿過針孔平面的針孔,光束在圖像平面成像,,形成圖像x,。其中,f為攝像機焦距,,Z為攝像機與物體間距離,。

  根據(jù)相似三角原理可得:

  1.png

  1.2 雙目測距模型

002.jpg

  利用針孔模型,可以得到雙目測距模型[3],。如圖2所示,,Ol、Or分別為兩攝像機的光心,,焦距為f1,、f2。光軸經(jīng)過兩個像平面的主點cl,、cr,。假設(shè)兩攝像機的像平面精確共面,圖像行對準(zhǔn),,光軸嚴(yán)格平行,,并且具有相同的焦距f(以上這些假設(shè)都是需要后面實現(xiàn)的)。物理世界中的P在左右平面上的成像點為pl,、pr,,對應(yīng)橫坐標(biāo)xl、xr,。

  視差定義為d=xl-xr,。根據(jù)相似三角形原理,以左攝像機光心為原點,可以得到左攝像機坐標(biāo)系下的深度Z:

  2.png

2 實驗平臺

  本系統(tǒng)主要分為硬件和軟件兩類,。硬件是以S3C2440A為核心的ARM嵌入式開發(fā)平臺,。S3C2440A以ARM920T為核心,低功耗,,簡單,,適合于成本和功耗敏感的應(yīng)用。使用CMOS立體攝像頭視頻流數(shù)據(jù),,圖片格式JPEG,。LCD液晶顯示器負(fù)責(zé)圖像數(shù)據(jù)的顯示和人機交互。軟件部分由攝像頭及屏幕驅(qū)動程序,、OpenCV圖像處理算法,、QT主程序設(shè)計等組成。

  開放源代碼的計算機視覺類OpenCV是由一些C函數(shù)和C++類所組成的庫,,用來實現(xiàn)圖像處理和常用的計算機圖像算法,。具有開發(fā)效率高、執(zhí)行速度快等優(yōu)點,。使用C函數(shù)和C++類可進行跨平臺移植,,因此可以很好地應(yīng)用于工程實際當(dāng)中。

  QT是跨平臺C++圖形用戶界面工具,。它特有的“信號-插槽”機制是QT編程的基礎(chǔ),,當(dāng)一個特定事件發(fā)生的時候,一個信號被發(fā)射,。因此,,執(zhí)行按鈕等事件時,可以方便地執(zhí)行各個功能,,如界面切換,、顯示和關(guān)閉等。本嵌入式系統(tǒng)的功能框圖如圖3所示,,其功能都是利用“信號-插槽”機制實現(xiàn),。

003.jpg

3 系統(tǒng)實現(xiàn)

  3.1圖像采集

  獲取立體圖像是圖像處理的基礎(chǔ),圖像質(zhì)量受到光照條件,、攝像機性能以及景物特點等因素的影響,。因此,獲得高質(zhì)量的立體圖像是雙目測距前提,。

  V4L2(Video 4 Linux 2)是針對免驅(qū)USB設(shè)備的編程框架,,主要用于采集USB攝像頭。為了更方便地調(diào)節(jié)視頻設(shè)備的屬性,,本系統(tǒng)并沒有使用OpenCV獲取圖像,,而是調(diào)用V4L2的接口函數(shù),。在Linux系統(tǒng)編程中,一般使用ioct()函數(shù)來對設(shè)備的I/O通道進行管理[4],。

  針對本嵌入式的特點,,使用ioct()函數(shù)可以設(shè)置圖片亮度、對比度,、格式,、尺寸,如設(shè)置320×240或者640×480的分辨率,,以適應(yīng)屏幕大小,。

004.jpg

  系統(tǒng)圖像采集過程如圖4所示。其中,,圖像處理階段若是處在獲取標(biāo)定,可以用Opencv中的“角點檢測”函數(shù)計算角點個數(shù),,以判斷角點圖的好壞,。在測距時,可以完成圖像的處理,。利用V4L2采集圖像的主要過程如下:

 ?。?)fd=open(″dev/video0″,O_RDWR),,打開設(shè)備文件,,即左、右攝像機,。

 ?。?)ioctl(fd,VIDIOC_QUERYSTD,,&std),,取得設(shè)備的功能,查看設(shè)備具有什么功能,。

 ?。?)ioctl(fd,VIDIOC_S_FMT,,&fmt),,設(shè)置攝像機視頻圖片格式。

 ?。?)ioctl(fd,,VIDIOC_REQBUFS,&req),,向驅(qū)動申請幀緩沖,。

 ?。?)mmap(),申請物理內(nèi)存,,并將申請到的幀緩沖映射到用戶空間,。

  (6)ioctl(fd,,VIDIOC_STREAMON,,&type),開始視頻的采集,。

 ?。?)ioctl(fd,VIDIOC_DQBUF,,&buf),,出隊列以取得已采集數(shù)據(jù)的幀緩沖,取得原始采集數(shù)據(jù),。

 ?。?)ioctl(fd,VIDIOC_STREAMOFF,,&type),,停止視頻的采集,然后使用munmap()函數(shù)刪除映射,。

 ?。?)close(fd),關(guān)閉視頻設(shè)備,。

  3.2 基于QT的圖像顯示

  在OpenCV中,,圖片是IplImage類型,IplImage類型圖片的每個像素點是由24位的三通道B,、G,、R(藍、綠,、紅)三種顏色組成,。若使用QT庫內(nèi)與圖像處理與顯示有關(guān)的QImage類,QImage類顏色的排列順序為R,、G,、B(紅、綠,、藍),。為使IplImage類圖像能夠在QT圖像界面中顯示,又不降低視頻圖像質(zhì)量,,需要通過程序?qū)GR圖像轉(zhuǎn)化為RGB圖像,,即交換R通道與B通道的順序,,可采用cvCvtColor()函數(shù)。由于本系統(tǒng)QT的特殊性,,圖片不能直接顯示,,可將圖像顯示在label上。采用如下語句進行轉(zhuǎn)換及顯示:

  QLabel label(this),;

  cvCvtColor(frame,,frame,CV_RGB2BGR),;

  QImage image=QImage((const uchar*)frame->imageData,,

  frame->width,frame->height,,QImage::Format_RGB888),;

  label.setPixmap(QPixmap::fromImage(image));

  label.show(),;

  3.3 攝像機標(biāo)定

  在雙目視覺中,,可以通過兩幅二維圖像對應(yīng)像素點計算得到三維世界坐標(biāo)與二維世界坐標(biāo)的對應(yīng)關(guān)系,以此得到物體的三維坐標(biāo)值[5],。

  光軸與圖像平面的交點與中心的偏移形成兩個攝像機的內(nèi)cx、cy,。單個像素點在成像儀上是矩形,,形成另外兩個x、y方向上的焦距內(nèi)參fx,、fy,。這樣,可以得到攝像機的內(nèi)矩陣M,,將物理世界的點Q(X,,Y,Z)投影到攝像機上q(x,,y),,利用齊次坐標(biāo),可表示為:

  q=MQ(3)

  其中,,M=fx  0 cx0 fy cy0 0 1,,q=xy1,Q=XYZ

  透鏡的球形形狀產(chǎn)生徑向畸變k1,、k2,、k3,在成像儀上徑向位置按下式進行調(diào)節(jié):

  4.png

  透鏡與圖像不平衡產(chǎn)生切向畸變,,用兩個參數(shù)p1和p2表示:

  5.png

  其中,,(x,,y)是原來的點,(xcorrected,,ycorrected)為修正后的點,。

  兩攝像機之間的旋轉(zhuǎn)矩陣R和平移向量T構(gòu)成了攝像機的外參。OpenCV中利用cvStereoCalibrate()函數(shù)和多幅棋盤角點圖(圖5)進行立體標(biāo)定,。

005.jpg

  3.4 立體校正

  在實際應(yīng)用中,,攝像機幾乎不可能像圖1那樣嚴(yán)格地前向平行對準(zhǔn),但可以通過數(shù)學(xué)方法計算投影圖和畸變圖,,從而將左右攝像機圖像校正為前向平行對準(zhǔn)[6],。立體校正的目的就是使得兩臺攝像機準(zhǔn)確共面并且相對準(zhǔn),因此需要進行校正,。

  立體校正算法有非標(biāo)定校正(如Hartley算法)等,。其可以簡單地通過場景中觀察點完成校正,然而不可獲知圖像比例,。Bouguet算法為標(biāo)定立體算法,,使用兩臺攝像機之間的旋轉(zhuǎn)和平移參數(shù)進行校正計算。Bouguet立體校正可使得兩圖像中的每一幅重投影次數(shù)都最小化,,同時使得觀測面積最大化,。

  通過OpenCV中cvStereoRectify()立體校正函數(shù),可以得到重投影矩陣Q:

  6.png

  3.5 立體匹配

  圖像立體匹配實質(zhì)上解決了對不同時間或空間位置下獲取的同一物體的兩幅或多幅圖像信息在位置空間或灰度空間上尋找對應(yīng)匹配像素點的問題,。簡言之,,尋找這些圖像中相同物體的對應(yīng)像素點。

  立體匹配找到兩個不同攝像機圖像中具有相同特征的點,。OpenCV中有BM算法,、SGBM算法、GC算法等,。其中BM算法測距速度很快,,可以達到實時應(yīng)用的要求,SGBM算法和GC(Graph Cuts)算法的測距速度較慢,,而BM算法誤差只比SGBM算法稍大,,故系統(tǒng)采用BM算法[7]。BM塊匹配算法cvFindStereoCorrespondenceBM()函數(shù),,使用“絕對誤差累計”,,查找左右兩幅立體校正圖像之間的匹配點,匹配代價函數(shù):

  7.png

  其中E表示匹配窗口灰度均值,,D為匹配窗口,,d為窗口的位移量。代價越小,,匹配度越高,。通過規(guī)定視差的搜索范圍構(gòu)成一個雙目視界,。

  3.6 三維重建

  利用立體匹配得到的視差d、圖像中通過角點檢測到的點(x,,y)以及由立體校正得到的投影矩陣Q,,可得到3D深度:

  8.png

  其中三維坐標(biāo)就是(X/W,Y/W,,Z/W),。Opencv中的函數(shù)cvReprojectImageTo3d(),該函數(shù)輸入視差數(shù)據(jù)和每個像素坐標(biāo),,輸出所需的三維點陣,,這樣就可以提取物體的深度信息。

4 實驗結(jié)果

  OpenCV利用張正友標(biāo)定法,,使用20幅擺放在不同位置的平面黑白棋盤圖,,對攝像機標(biāo)定。在應(yīng)用過程中,,攝像機標(biāo)定誤差及系統(tǒng)結(jié)構(gòu)參數(shù)對系統(tǒng)測量精度有著不同程度的影響[8],,采取優(yōu)化方法后的攝像機內(nèi)參數(shù)如下。

  左攝像機內(nèi)參數(shù)為:

 912.jpg

  利用上述參數(shù),,使用該系統(tǒng)測量多個目標(biāo)物體的距離,,將測量值與實際值進行比較,得到表1所示結(jié)果,。

  實驗表明,,攝像機間的距離約36.5 mm時,在300~2 500 mm的實驗范圍內(nèi),,系統(tǒng)能夠識別匹配物體的圖像,得出物體的距離的測量誤差在10%以內(nèi),。系統(tǒng)測距較為準(zhǔn)確,。但隨著距離的增加,導(dǎo)致匹配效果較差,,誤差有逐漸擴大的趨勢,。物體距離為2 500 mm時,測量距離誤差已超過100 mm,。因此,,本系統(tǒng)暫不適合遠距離測距。為提高測距精度,,可從以下幾個方面入手:增加標(biāo)定圖像數(shù)目,,增加基線長度,調(diào)整相應(yīng)參數(shù),,變換圖像處理方法,,增大焦距等,。如何更有效地減少測量誤差,擴大測距范圍,,需要以后不斷研究和改進,。

參考文獻

  [1] 趙鵬.機器視覺理論及應(yīng)用[M].北京:電子工業(yè)出版社,2011.

  [2] 王杰,,孟浩,,張潔.基于嵌入式Linux的雙目測距系統(tǒng)研究[J].世界科技研究與發(fā)展,2014,,36(3):263-267.

  [3] BRADSKI G,, KAEHLER A. 學(xué)習(xí)OpenCV[M]. 于仕琪,劉瑞禎,,譯. 北京:清華大學(xué)出版社,,2009.

  [4] 白長清,陳沛.嵌入式終端基于Linux V4L2的圖像采集系統(tǒng)[J].科技資訊,,2012(2):22-23.

  [5] 陳勝勇,,劉盛.基于OpenCV的計算機視覺技術(shù)實現(xiàn)[M].北京:科學(xué)出版社,2008.

  [6] 任繼昌,,楊曉東.基于角點檢測的雙目視覺測距新方法[J].電光與控制,,2013,20(7):93-95.

  [7] 王浩,,許志聞,,謝坤,等.基于OpenCV的雙目測距系統(tǒng)[J].吉林大學(xué)學(xué)報(自然科學(xué)版),,2014,,32(2):188-193.

  [8] 肖志濤,張文寅,,耿磊.雙目視覺系統(tǒng)測量精度分析[J].光電工程,,2014,41(2):6-11.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。