機器視覺簡介

如果機器人需要和外界環境進行交互,那麼機器人首先必須要感知周圍的環境。機器視覺是最為常用的一種感知周圍環境的方法。這裡,我們將簡單介紹機器視覺領域一些基本的概念。機器視覺是一個龐大的領域,這裡我們將僅僅介紹其在工業機器人中的應用。通過本文的介紹,我們將可以自己構建一個簡單的機器視覺系統,舉例來說,我們可以通過圖像確定室內物體的位置,並且確定物體的形狀等。進一步的,機器視覺可以與機器人動力學相結合,從而可以操縱機器人完成一些特定的任務,如物體的搬運、抓取等。

首先,我們將討論圖像形成的幾何原理,進而可以掌握現實世界中實際物體與它們在圖像中表示的關係。然後,我們將討論如何確定上述關係中的一些關鍵參數。然後,將上述圖像進行分割,從而得到圖像中的背景描述以及物體描述。進一步的,我們將討論圖像中存在多個物體的情況。最後,我們將學習利用圖像中物體投影的位置確定現實世界中物體的實際位置。

1. 圖像形成的幾何原理

數字圖像是通過將光投影到一個二維的感光陣列上得到的一個二維的矩陣。鏡頭將光線投射到由CCD感測器組成的感光陣列上。鏡頭和感光陣列在攝像頭中組裝在一起,其中感光陣列的輸出連接到數字化儀或者圖像採集卡上。如果攝像頭為模擬攝像頭,那麼數字化儀將模擬信號轉換為數字信號,然後進一步的由幀捕捉器獲得像素陣列。若攝像頭為數字攝像頭,那麼幀捕捉器將來自攝像頭的數據直接轉換為像素陣列。其中,數字圖像像素陣列中的每個像素值均為一個在0-255之間的灰度值,其表示外界光線投射到感光陣列上光的強度。

在機器人應用領域中,我們一般般僅僅考慮圖像形成的幾何過程,而不考慮其他過程(如鏡頭型號、輻射測量等)。

這裡,我們將首先在成像系統中定義一個攝像頭坐標系,然後將討論針孔成像原理。進一步的,我們將推導圖像中坐標點與現實世界的關係。最後,我們將討論攝像頭標定的方法,通過攝像頭的標定將獲得成像過程中的相關參數。

2. 攝像頭坐標系

為了簡化攝像頭成像的建模過程,我們通常將攝像頭坐標系中心固定在攝像頭上。這裡,我們將攝像頭坐標系定義如下:

定義圖像平面pi表示攝像頭中感光陣列所在平面,其中坐標軸x_cy_c為圖像平面中的一組基底,一般選擇x_cy_c平行於圖像的水平和垂直軸。坐標軸z_c一般選擇為垂直於上述圖像平面並且與鏡頭的光軸(鏡頭焦點與其幾何中心的連線)一致。攝像頭坐標系的原點一般選擇位於鏡頭的焦點處。攝像頭坐標定義如下圖所示:

在上面定義的攝像頭坐標系中,圖像平面中的任何一點均可以表示為(u,v,lambda)的形式,因而,我們可以使用坐標(u,v)來參數化圖像平面,進一步的,我么可以用(u,v)表示圖像平面中點的實際坐標。

3. 透射投影

攝像頭成像過程一般使用針孔成像模型進行描述,這裡,鏡頭被看作一個理想針孔,其中針孔固定在鏡頭的焦點上。光線通過針孔並且與圖像平面相交。

假設P為現實世界中一點,其在攝像頭坐標系中的坐標為(x,y,z)。p表示其在圖像平面上的投影,其在攝像頭坐標系中的坐標為(u,v,lambda)。在針孔成像模型下,攝像頭坐標原點,成像點p,真實點P三點共線,因而,我們可以使用下式表示其關係:

其中,k為一常數。

上式可以被整理為如下形式:

因而,如果我們可以確定P與p在攝像頭坐標系中的z方向坐標z,lambda,那麼,我們可以得到:

上式即為透射投影的幾何表達式。

4. 圖像平面與感測器陣列

根據以上描述,我們知道,數字圖像實際上是一個使用灰度值構成的離散陣列。這裡,我們將使用坐標(r,c)表示圖像中像素點的坐標(r,c均為整數)。為了使用圖像描述真實世界,我們需要得到圖像平面中點的坐標u,v(均為位置實際值)與像素點坐標(r,c)的關係。

一般而言,我們將像素陣列的起始點定義在圖像的邊緣而不是中心,假設像素陣列的中心點定義在(o_r,o_c),像素陣列中每個像素的長和寬分別為s_x,s_y。另外需要注意的是,像素陣列坐標軸方向與圖像平面坐標軸方向一般取為相反方向,因而,我們可以得到圖像平面坐標與像素陣列坐標之間的關係如下:

即:

由於像素陣列坐標(r,c)為整數,因而我們無法根據圖像像素信息獲得精確的真實世界的描述。

5. 攝像頭的標定

攝像頭標定的目的是為了確定根據圖像中像素點的坐標(r,c)信息預測真實世界信息所需要的攝像頭的參數。也就是,給定現實世界中任意一點P,經過攝像頭標定後,我們可以確定其在圖像中的像素坐標(r,c);反之亦然。

首先,我們確定攝像頭外部幾何參數。

在3中,我們推導透射投影公式的時候,所有的坐標都是基於攝像頭坐標系進行描述。在典型的機器人應用領域中,所有的信息都是在現實世界坐標系進行描述的,因而,我們需要進行坐標變換。假設我們知道攝像頭坐標系相對於現實世界坐標系的關係如下:

其中,w表示現實世界(world),c表示攝像頭坐標系(camera)。

為了簡便起見,我們使用定義:

其中,R為旋轉矩陣,T為平移矩陣。

我們可以得到:

攝像頭一般固定在三腳架上或者其他機械定位裝置上(可以進行平移或者旋轉運動)。一個很典型的機械定位裝置是平移/傾斜頭,其含有2個自由度,一個繞z方向旋轉,一個繞x方向旋轉(如人類頭部一樣,可以上下點頭,也可以左右轉動)。這是,旋轉矩陣可以寫作:

其中,theta是攝像頭坐標系與真實世界坐標系x軸之間的夾角,alpha為攝像頭坐標系與真實世界坐標系z軸之間的夾角。

接下來,我們討論攝像頭內部參數。

根據針孔成像模型,我們可以使用下面的方程將攝像頭坐標系中點的坐標映射到圖像像素陣列中的坐標:

進一步整理得到:

因而,如果,我們可以得到lambda,s_x,o_r,s_y,o_c,那麼我們便可以根據攝像頭坐標系中點的位置確定其在像素陣列中的坐標,實際上,我們並不需要準確知道鏡頭焦距以及像素的長寬信息,而僅需要知道它們的比例即可,即:

上述四個參數f_x,o_r;f_y,o_c被稱為攝像頭的內部參數,對於一個攝像頭來說,其參數均為常數,並且不隨著攝像頭位置改變而變化。

接下來我們將對上述內部和外部參數進行標定。

在攝像頭所有參數中,圖像中主點的位置o_r,o_c是最容易確定的參數,我們可以使用消失點法確定這兩個參數。消失點法的基本思想如下:現實世界中的一系列平行直線在圖像中將消失於一點,這個點被稱為消失點。三組相互垂直的平行線將在圖像中確定三個消失點。由三個消失點組成的三角形的重心(高的交點)即為圖像的主點。因而,計算中心點最簡單的方法就是在工作空間中放置一個立方體,然後計算出平行線簇在圖像中的消失點,既可以確定圖像的主點。

平行鐵軌消失於遠方

在得到圖像的主點位置o_r,o_c後,我們進一步的確定其他參數。確定的方法這裡是通過構建一組線性方程組描述真實世界中的點與圖像中像素點的位置,其中線性方程組的未知參數即為攝像頭的參數。因而,首先我們需要獲取一些列點集,如r_i,c_i,x_i,y_i,z_i的形式,其中,x_i,y_i,z_i為現實世界坐標系中點的坐標,r_i,c_i為其在圖像中的投影坐標。上述採集過程一般通過手動將攝像頭移動到一個可以觀察到已知位置x,y,z的地方,然後在圖像中選擇其投影點r,c

在得到上述點集後,我們便可以構建線性方程組表示它們之間的關係。

根據上面的描述,我們知道沒攝像頭的外部參數可以使用下面兩個變換表示:

因而,如果我們知道現實世界坐標系中點的坐標為(x,y,z),那麼,其在攝像頭坐標系中點的坐標(x_c,y_c,z_c)為:

將其與上面攝像頭坐標系與圖像坐標系中像素點坐標的變換關係相結合可以得到:

由於我們已經得到了主點的坐標,因而,上是可以通過下面的方式進行簡化:

接下來我們將上述投影變換方程統一表示為含有未知參數r_{ij},T_x,T_y,T_z,f_x,f_y的形式。對上述變換關係中兩式兩邊取除得到:

定義:

我們可以進一步得到:

將N個上述線性方程結合可以得到矩陣形式:

上式為線性方程Ax=0的形式,因而,如果我們可以得到一組解:

其中,k為未知係數。

為了得到攝像頭系統的真實值,我們需要確定上述未知參數k。考慮上述旋轉矩陣R為旋轉矩陣,因而:

同樣的:

接下來,我們需要確定係數k的符號,其符號由下式確定。

我們需要保證我們選擇的係數k的符號可以使得上式成立。

此時,我們已經得到了參數k,alpha,r_21,r_22,r_23,r_11,r_12,r_13,T_x,T_y,接下里我們需要確定T_z,f_x,f_y,根據:

然後,通過求解線性方程組,既可以得到T_zf_x

推薦閱讀:

要讓人工智慧有「靈氣」?得賦予它一雙聰慧的「眼睛」
【機器視覺】張氏法相機標定
【乾貨】為什麼玩VR會頭暈?
機器視覺、圖像處理、機器學習領域相關代碼和工程項目和數據集 集合
ADAS領域中,雷達和機器視覺各有什麼優劣,未來的趨勢是共存還是某個徹底勝出?

TAG:机器人 | 机器人操作平台ROS | 机器视觉 |