雙目立體視覺學習筆記(一)


雙目立體視覺

立體視覺(Stereo Vision)又稱為三維視覺,它通過兩個或多個相機采集被測目標的圖像,並將這些圖像調整至同一平面,然后基於其中同一被測特征點所對應像素間的差異來重建三維信息或實現三維測量。研究立體視覺技術,可以將機器視覺系統的應用范圍從二維平面擴展到三維環境。

立體視覺被廣泛用於三維導航、三維定位、目標追蹤和機器人研究等工業領域。例如,雙目機器人可以使用三維信息來測量障礙物的尺寸和距離,以進行准確的路徑規划。在目標分揀應用中,使用立體視覺系統可以避免部件被遮擋和照明變化對定位的影響,為機器手臂提供精確的目標位置信息。這就使得立體視覺特別適合那些需要機械手從包裝箱或其他容器中分揀出某一特定 3D 對象的應用。立體視覺系統對於亮度變化和陰影可保持不變性,因此可還可用於目標追蹤、自動駕駛系統障礙物檢測等場合。

基於雙相機構建的雙目視覺(Binocular Stereo Vision)系統是最小的立體視覺系統。它能完成大多數三維場景下的任務,而且多目視覺系統可看作是多個雙目系統的組合,因此對雙目系統的研究就成了立體視覺系統的研究重點。本章着重介紹雙目立體視覺系統的原理、系統校准、圖像調整、圖像關聯以及場景深度信息計算等技術。

1.雙目視覺系統原理

雙目視覺系統與生物的眼睛類似,不僅可以獲取場景的平面圖像信息,還能計算被測目標的距離和相對深度信息。圖 1顯示了雙目視覺的示意圖,由圖可見,世界坐標系中被測目標表面上任一點\(P(X_{W},Y_{W},Z_{W} )\),在左相機坐標系中像面上的投影點為 \(p(u_{L},v_{L})\),在右相機坐標系中像面上的投影點為 \(p(u_{R},v_{R})\)。若僅用有一個相機的單目視覺系統觀察,只能獲知點 \(P(X_{W},Y_{W},Z_{W} )\),可能位於左相機光心\(O_{L}\)與點 \(p(u_{L},v_{L})\)所構成的射線上,或位於右相機光心\(O_{R}\)與點 \(p(u_{R},v_{R})\)所構成的射線上。但是若同時用有兩個相機的雙目視覺系統觀察,並且如果能確定像點\((u_{L},v_{L})\)\((u_{R},v_{R})\)對應於同一空間特征點\(P(X_{W},Y_{W},Z_{W} )\),就可以通過兩個像點與相機光心所構成的兩直線的交點計算出點 \(P(X_{W},Y_{W},Z_{W} )\)的確切位置。注意,由於相機成倒立圖像,圖1中將正立相面置於相機前方焦距處,以方便討論。
在這里插入圖片描述
圖 1 雙目視覺示意圖

根據相機小孔成像原理,其成像過程可用幾何投影法來表示,如圖2所示。其中\(O_{c}\)點為相機光心,\(O_{c}Z_{c}\)為相機光軸,\(O_{c}-X_{c}Y_{c}Z_{c}\)組成的直角坐標系為相機坐標系。\(O_{I}\)位於相機光軸與圖像平面(焦距處)的交點,它一般位於圖像中心。\(O_{I}-uv\)組成的直角坐標系為圖像坐標系。若將相機抽象為小孔成像模型,則相機坐標系中任意一空間點\(P(X_{c},Y_{c},Z_{c})\)在圖像平面中的位置\(p_{u,v}\),為光心和點\(P({X_{c},Y_{c},Z_{c})}\)的連線與圖像平面的角點。這種關系稱為中心透視投影(Perspective Projection)。
在這里插入圖片描述
圖 2 三維空間與相面的投影關系

根據三角比例關系,若已知點\(P\)在相機坐標系\(O_{c}-X_{c}Y_{c}Z_{c}\)中的坐標\(P({X_{c},Y_{c},Z_{c})}\),則可得到圖像坐標系\(O_{I}-uv\)中像點坐標\(p(u,v)\)與它的關系:
\(\begin{cases} u=f*\frac{X_{c}}{Z_{c}} \\ v=f*\frac{Y_{c}}{Z_{c}} \end{cases}\)
可得
\(\begin{cases} X_{c}=\frac{u * Z_{c}}{f} \\ Y_{c}=\frac{v * Z_{c}}{f} \end{cases}\)

其中,\(f\)為相機像平面與相機坐標系原點之間的距離(一般為相機的焦距)。坐標\(Z_{c}\)為物距,它決定相機圖像的大小,其值越大,相機所成圖像越小。若用齊次坐標和矩陣來表示上述關系,則上式可寫為
\(Z_{c}\begin{bmatrix}u \\v \\1 \end{bmatrix}=\begin{bmatrix}f & 0 & 0 & 0\\0 &f & 0 & 0\\0 & 0 & 1&0 \end{bmatrix}\begin{bmatrix}X_{c} \\Y_{c} \\Z_{c} \\1 \end{bmatrix}\)

齊次坐標是一種\(n+1\)維向量表示一個\(n\)維向量的表示法,它更便於 通過矩陣相乘的形式來表示低維空間中用矩陣乘法和加法表示的仿射變換(Affine Transformation),即坐標的平移、縮放、旋轉、傾斜或者它們的組合,如圖3所示。
在這里插入圖片描述
圖3 齊次坐標與仿射變換

繼續相機投影關系的討論,若已知相機傳感器上物理像素的尺寸\((d_{x},d_{y})\)\(O_{I}\)相對圖像左上角的距離\((u_{0},v_{0})\),則可得到以像素為單位的像點的坐標\(p(i,j)\)
\(\left\{\begin{matrix}i = \frac{u}{d_{x}}+u_{0}=\frac{f\cdot X_{c} }{Z_{c} \cdot d_{x}}+u_{0} \\ \\j = \frac{v}{d_{y}}+v_{0}=\frac{f\cdot Y_{c} }{Z_{c} \cdot d_{y}}+v_{0} \end{matrix} \right. \Rightarrow Z_{c}\begin{bmatrix}i \\j \\1 \end{bmatrix} =\begin{bmatrix}\frac{1}{d_{x}} &0 &u_{0} \\0 &\frac{1}{d_{y}} &v_{0} \\0 &0 &1 \end{bmatrix} \cdot \begin{bmatrix}f &0 &0 &0\\0 &f &0 &0\\0 &0 &1 &0 \end{bmatrix} \begin{bmatrix}X_{c} \\Y_{c} \\Z_{c} \\1 \end{bmatrix}\)

也就是說,若已知空間某點在相機坐標系中的坐標\(P(X_{c},Y_{c},Z_{c})\),就能根據投影關系和相機的內部參數(焦距\(f\)、物理像素大小等),計算得到像點在圖像坐標系中的位置。

但是實際開發時,空間點的位置並不一定都用相機的坐標來表示,而是可能在環境中選擇一個基准坐標系來描述相機和環境中的物體的位置,該坐標系稱為世界坐標系。空間點在相機坐標系與世界坐標系中的坐標可以通過旋轉與平移來轉換,表示為:
\(\mathbf{P}_{c}=\mathbf{RP_\mathrm{w}}+\mathbf{B}\Leftrightarrow \begin{bmatrix}X_{c} \\Y_{c} \\Z_{c} \\1 \end{bmatrix} =\begin{bmatrix}\mathbf{R} &\mathbf{B} \\ \mathbf{0} &1\end{bmatrix}\begin{bmatrix}X_{W} \\Y_{W} \\Z_{W} \\1 \end{bmatrix}\)

其中\(\mathbf{P_\mathrm{W}}=(X_{W},Y_{W},Z_{W})^{T}\)為空間點的世界坐標,\(\mathbf{P_\mathrm{c}}=(X_{c},Y_{c},Z_{c})^{T}\)為其在相機坐標系中坐標,\(\mathbf{B}=(b_{x},b_{y},b_{z})^{T}\)為三維平移向量,表示兩坐標系在3個方向上的距離,\(\mathbf{0}=(0,0,0)\)\(\mathbf{R}\)為3X3的旋轉矩陣,它可以分解為3個矩陣的乘積。分解得到3個矩陣分別表示空間點繞X軸(滾轉)、繞Y軸(俯仰)、繞Z軸(偏航)的旋轉矩陣,如圖4所示。
在這里插入圖片描述
圖4 三維坐標轉換

綜上所述,可以得到以三維空間點世界坐標\(\mathbf{P_\mathrm{W}}=(X_{W},Y_{W},Z_{W})\),與其在圖像中以像素為單位的坐標\(p(i,j)\)之間的如下關系(先將\(\mathbf{P_\mathrm{w}}\)轉換為相機坐標系坐標,再進行投影變換):
在這里插入圖片描述
其中,\(\mathbf{P_\mathrm{w}^{'}}=(X_{w},Y_{w},Z_{w})^{T}\),M 為 3×4 的投影矩陣,由式中各矩陣組合而成。相機的像素大小\((d_{x},d_{y})\),焦距及圖像坐標原點到圖像左上角的距離\((u_{0},v_{0})\)均為相機的內部參數,而相機坐標系與世界坐標系之間的旋轉和平移矩陣由相機的安裝位置和方式決定,屬於外部參數。當選定相機並確定了其安裝位置和安裝方式后,相機的內外參數就能被確定。而此時若已知空間中某點在世界坐標系(預先確定)中的坐標 \(\mathbf{P_\mathrm{w}}=(X_{w},Y_{w},Z_{w})^{T}\),就能得到 3個方程式,在這 3 個方程中消去\(Z\).就可求出 \(p(i,j)\)。但是,若反過來已知空間某點對應的圖像點像素坐標 \(p(i,j)\)和相機的內外參數,從得到的 3 個方程中消去\(Z\),卻並不能得到該點在世界坐標系中的位置 \(\mathbf{P_\mathrm{w}}=(X_{w},Y_{w},Z_{w})^{T}\),而只能得到關於\(X_{w},Y_{w}\)\(Z_{w}\)的兩個線性方程。

由這兩個線性方程組成的方程組即為圖 2 中射線\(O_{c}P\) 的方程,也就是說任何位於該射線上的空間點在圖像上的投影點均為\(p(i,j)\)。由此可見,僅用單目視覺系統無法確定空間點的確切位置。

雙目視覺系統可基於兩個相機所采集的圖像中兩個同源點(Homologous Points)之間的距離,由三角幾何法重建空間三維信息。同源點是空間某點在不同圖像中的成像點,又稱為共軛點(Conjugate Points)。它們在圖像中的距離差異稱為視差(Disparity)。

研究雙目系統時一般先要明確研究過程所涉及的以下幾種類型的坐標系(參見圖 5):
在這里插入圖片描述圖 5 雙目系統中的坐標系
(1)世界坐標系。預先在環境中選擇的基准三維坐標系,用來描述相機和環境中物體的坐標位置。在雙目視覺系統中,一般將左相機坐標系定義為世界坐標系。
(2)相機坐標系。以相機光心為原點,光軸為Z 軸的三維坐標系。在雙目系統中,左右兩個相機坐標系可通過旋轉和平移進行轉換。
(3)圖像坐標系。相機所成圖像的二維坐標系,可以用像素數量描述,也可以用物理尺寸描述。對於相機坐標系中的某個三維空間點,可通過三角投影變換計算得到其再圖像坐標系中像點的位置。
根據前述討論,若定義左相機坐標系就是世界坐標系,那么世界坐標系中的點\(\mathbf{P_\mathrm{w}}=(X_{w},Y_{w},Z_{w})\)到左相機的圖像坐標系中的位置可直接通過三角投影關系計算得到:
\(Z_{w}\begin{bmatrix}u_{L} \\v_{L} \\1 \end{bmatrix}=\begin{bmatrix}f_{L} &0 &0 &0 \\0 &f_{L} &0 &0 \\0 &0 &1 &0 \end{bmatrix}\begin{bmatrix}X_{w} \\Y_{w} \\Z_{w} \\1 \end{bmatrix}\)
其中下標 L表示與左相機相關的值。該點在右側相機圖像坐標系中的位置同樣可以通過投影變換計算得到。但是由於投影變換必須在對應的相機坐標系中進行,因此必須先將空間點的世界坐標\(\mathbf{P_\mathrm{w}}=(X_{w},Y_{w},Z_{w})\)通過旋轉平移變換為右相機坐標系中的坐標\(\mathbf{P_\mathrm{R}}=(X_{R},Y_{R},Z_{R})\),然后才能正確計算。表示如下:在這里插入圖片描述
因此,若已知左右相機的坐標系和焦距以及空間中某一點在兩個相機圖像坐標中的位置,就能通過兩個相機的投影變換關系得到 4 個方程。而根據這4個方程,就不難求出空間點的世界坐標\(\mathbf{P_\mathrm{w}}=(X_{w},Y_{w},Z_{w})\)。不僅如此,實際開發中常會使用更簡單的平視雙目系統模型來簡化問題。圖 6 顯示了平視雙目系統的結構及其特點。通常來說系統中的兩個相機類型相同(至少焦距相同)且平行安裝。定義左相機坐標系為世界坐標系,且左右相機坐標系的X 軸共線,並與基線平行。平視雙目系統也可以通過移動單個相機來實現,這種情況下,相機的運動軌道必須為直線。
在這里插入圖片描述
圖 6 平視雙目系統及其特點

平時雙目視覺系統特點:
(1)兩個相機類型相同,或者至少焦距相同。
(2)兩個相機平行安裝,若為單個相機運動系統,則運動軌跡為直線。
(3)兩個相機X軸共線,且與基線平行。
(4)定義左相機坐標系為世界坐標系

假定圖 6 中平行安裝的兩個相機中心連線的距離為 B(稱為基線),空間點\(\mathbf{P_\mathrm{w}}=(X_{w},Y_{w},Z_{w})\)在左右兩個相機所成圖像的坐標系中的位置分別為\(p(u_{L},v_{L})\)\(p(u_{R},v_{R})\)。由於兩個相機類型相同,因此所稱圖像在同一平面上,從而空間點在兩個圖像坐標系中Y方向的坐標相同,即\(v_{L}=v_{R}\)。進一步根據幾何關系可得到:
\(\begin{cases}u_{l}=f\cdot \frac{X_{W}}{Y_{W}} \\ \\u_{R}=f\cdot \frac{X_{W}-B}{Z_{W}} \\ \\v_{L}=v_{R}=f\cdot \frac{Y_{W}}{Z_{W}} \end{cases}\)

其中\(f\)為相機焦距(左右相機焦距相同)。注意,在計算像點在右相機所成圖像上的位置時,先通過坐標平移將\(\mathbf{P_\mathrm{w}}=(X_{w},Y_{w},Z_{w})\)點的變換到右相機坐標系中,才進行計算。若定義視差\(d\)\(p(u_{L},v_{L})\)\(p(u_{R},v_{R})\)兩點在圖像中的距離差異,則有:

\(d=u_{L}-u_{R}=f\cdot \frac{B}{Z_{w}}\)

從而有:
\(Z_{w}=f\cdot\frac{B}{d}=f\cdot \frac{B}{u_{L}-u_{R}}\)

因此,只要左相機像面上的任意一點能在右相機像面上找到同源的匹配點,就可以根據視差確定該點的三維坐標。更進一步,只要被測目標像面上的所有點都可在另一相機中找到同源點,就可以確定被測目標的三維坐標。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM