u can read from:http://www.uptech-robot.com/
also u can get the documents from me.send me the private message
本文所包含的內容:
講述了 bumblebee 立體視覺的原理
講述了 bumblebee Demo 程式中各項參數的含義及如何調整 講述了為什麼在深度映像和重構的 3D映像中有無效的像素
本文的閱讀方法: 紅色字型是關鍵的地方
立體視覺
本文將試著去闡述立體視覺技術。閱讀完本文後你將對資料如何在系統中流動和其間所有可 調整的參數有一個更深入的瞭解。這將使你可以量身定做自己的系統來完成特殊的任務。
立體視覺的基本原理
立體視覺的任務是完成空間的測量,這種測量是基於空間上存在位移的相機所採集到的映像 的。立體視覺的處理過程可分為如下三步:建立從不同觀測角度所獲得的同一情境映像特徵的相關。 計算每幅映像中相同特徵的相對位移
根據相機的幾何結構,決定特徵相對於相機的3D
位置
考慮如下兩幅圖片。這兩幅圖片取自一對存在水平位移的 Triclops 相機模型。我們可以在兩 幅圖片中分別定義兩個點 A 和 B。點 Aleft
對應於點 Aright ,同樣的,點 Bleft 對應於點 Bright 。
使用一把尺子,如果你測量一個點到映像邊緣的水平距離,你會發現左圖的這個距離比右圖 中對應點到映像邊緣的水平距離要大。例如,左圖中邊緣到電話耳機的距離要大於右圖中邊緣到電話耳機的距離。我們就可以根據這個距離(也被叫做視差)來確定電話耳機到相機模型的距離。
我們把左圖和右圖中相同特徵在各自座標系中的值的差定義為視差。你會發現在兩幅圖中, 映像上端到所匹配的特徵的距離完全相同,這是因為相機是水平排列的,因此只有水平的位 移。
於是特徵 A 的視差被定義成 D(A) = x(Aleft) – x(Aright),B 的則為 D(B) = x(Bleft) – x(Bright),其 中 x(Aleft)是 Aleft 點的 x 軸座標。
如果你去計算D(A) 和
D(B),你會發現D(A)
<D(B),這說明在這個情境當中點A
比點B
要遠。
建立相關
Triclops 庫使用絕對相關偏差和的方法來建立映像間的相關。這種方法的原理如下:對於映像中的中每一個像素
在參照映像中,按照給定的正方形尺寸選擇一個鄰域 將這個鄰域沿著同一行與另一幅映像中的一系列鄰域相比較找到最佳的匹配
結束
鄰域的比較方法如下面的公式所示:
dmax
m m
2 2
min ∑ ∑
I right [x + i][ y + j] − Ileft[x
+ i + d ][ y + j]
d =dmin
i=− j =−
2 2
m m
其中:
d min 和 d max 是最小和最大視差(disparity)
m 是模板尺寸(mask size)
I right 和 Ileft 是右面的映像和左面的映像
計算距離 物體到相機的距離可由視差和相機的幾何結構確定。所匹配的特徵的距離是視差,鏡頭焦距 的長度,CCD的解析度和基準長度(兩相機間的距離)的函數。
Triclops 庫提供了深度映射轉化為距離映像的函數。
下面的方程給出了視差與距離的關係以及單個相機中全局座標與像座標的關係:
Z = bf ; X = u ;
Y = v
d Z f Z f
其中:
(X,Y,Z)是3D
點在全局座標系中的位置
f 是相機的焦距
(u,v)是像座標
d 是視差值
b 是相機間的基準長度
Triclops 庫中的資料流程
Triclops 庫中的資料流程如所示。系統首先從相機模型中獲得raw
格式的映像,最終將 其處理成深度映像。在系統中有兩個主要的處理模組。第一個處理模組是一個應用了低通濾波、映像校正和邊緣檢測的預先處理模組。第二個處理模組用來做立體匹配、結果確認和亞像 素插值。最後的處理結果就是一幅深度映像。
預先處理(Pre-processing)為了校正一幅映像,事先對其進行平滑是非常重要的。所以如果要校正一幅映像,事先將低 通濾波器開啟是很好的方法。當然不使用低通濾波器同樣可以校正映像,但校正後的映像可能會出現混淆的現象。如果要提高處理速度,可以將低通濾波器關掉。
校正(Rectification)
校正是用來修正鏡頭所產生的畸變的。在原始映像中可以看到鏡頭所帶來的這種畸變。例如,
情境中的一條直線在原始映像中會變成一條曲線,這種效果在映像的邊角處尤為明顯。校正就是為了修正這種類型的畸變。 進一步來講,如果沒有正確的校正,那麼沿著行或者列所做的特徵搜尋將可能產生錯誤的結果。
邊緣檢測(Edge detection)邊緣檢測是一項任選的特性,它使用亮度的變化來匹配特徵。當系統中的相機具有自動增益 功能時,這項功能是非常有用的。如果每個相機的自動增益的變化是不一致的,那麼映像間
的絕對亮度是不一致的,而雖然絕對亮度是不一致的,但亮度的變化卻是一個常數。因此邊 緣檢測適用於光照有很大變化的環境當中。雖然邊緣檢測可以改善檢測的結果,但這相當於 又引入了另外的處理步驟,因此要權衡結果的改善狀況和速度之間的關係來使用這項功能。
注意,確認功能僅在邊緣檢測模式下有效。
立體處理(Stereo processing)
立體處理使用前面所講過的絕對相關偏差和的演算法。
視差範圍(Disparity range)視差範圍是立體演算法為了在兩幅映像中搜尋最佳匹時,所搜尋的像素的範圍。在Triclops系
統中 0個像素的視差代表了無窮遠處的物體。最大的視差定義了能被檢測到的最近的物體。我們需要根據實際的任務來設定合適的視差範圍。減小視差範圍可以加快系統的運行速度, 並降低誤匹配的幾率。
相關模板(Correlation mask)相關模板是圍繞著一個像素的一個正方形鄰域,這個像素就是系統想要為其尋找匹配的像 素。我們可以設定這個相關模板的尺寸。大的模板會產生更密集更平滑的深度映像,然而,在識別不連續深度位置的精度上會有所欠缺。另一方面,小的模板所產生的映像較為稀疏且
會有更多的雜訊,但在定位不連續深度的時候會有上佳的表現。為了產生相同的結果,模板的尺寸要與被處理映像的解析度成一定的比例。就是說為了得到 具有可比性的結果,對於160x120映像的
5x5的模板,對於
320x240 映像的時候模板要增大 到9x9。模板的尺寸必須是奇數。3x3,5x5,7x7是有效模板尺寸,而
4x4,6x6,8x8則
是無效的模板尺寸。Triclops提供了最大為
15x15 和最小為
1x1的模板。另外,Triclops中
提供了一個新的用於實驗的函數:troclopsSetAnyStereoMask,這個函數允許使用者佈建任意尺 寸的相關模板。
確認(Validation)在一些情況下,例如封閉的缺乏變化的質地,是無法建立映像之間的相關的。如果相關建立 的不正確,那麼測量的結果也就是不正確的了。為了避免不正確的測量,系統引入了兩個確 認的方法:
質地確認(Texture validation)是基於相關模板的質地的水平的,它決定了視差值是否有效。如果質地的水平不足以產生一個正確的匹配,這個像素就會被聲明為無效。
唯一性確認(Uniqueness validation)是指對於一個特定像素的首選和這個相關模板下的 其他匹配比起來是不是足夠好。即使相關模板的質地滿足要求,由於封閉的原因,可能還是
得不到正確的匹配。如果相關的結果不足夠強,這個像素就會被聲明為無效。
使用者可以設定兩個閾值來控制確認的嚴格程度——一個是質地另一個是唯一性。