Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision
在上一講《Coursera自動駕駛課程第7講:Vehicle Lateral Control》中我們了解了如何對汽車進行橫向控制。
本課程第一個篇章就暫時告一段落了,接下來我們開始學習新的篇章。 課程第二個篇章是狀態估計和定位模塊。不過在這里我做了一下調整,我們先學習視覺感知模塊,即計算機視覺在自動駕駛中是如何應用的。
B站視頻鏈接:https://www.bilibili.com/video/BV1PE411D72p
文章目錄
- 1. The Camera Sensor
- 1.1 Overview
- 1.2 Pinhole Camera Model
- 1.3 Modern Day Cameras
- 2. Camera Projective Geometry
- 2.1 Projection: World to Image
- 2.2 Computing the Projection
- 2.3 The Digital Image
- 3. Camera Calibration (重點)
- 3.1 Problem Formulation
- 3.2 Linear Methods
- 3.3 Factoring and Factorizing the P matrix
- 3.4 Calibration Tools – SUPPLEMENTAL MATERIALS
- 4. Visual Depth Perception - Stereopsis (重點)
- 4.1 Overview
- 4.2 Stereo Camera Model
- 4.3 Computing 3D Point Coordinates
- 5. Visual Depth Perception - Computing the Disparity
- 5.1 Overview
- 5.2 Disparity Computation
- 5.3 Stereo Matching
- 6. Image Filtering
- 6.1 Overview
- 6.2 Cross-Correlation
- 6.3 Convolution
- 6.4 Applications
1. The Camera Sensor
1.1 Overview
從這一講開始,我們將學習新的篇章。我們將會了解計算機視覺領域的一些主要概念,包括相機模型及其校準,單目和立體視覺,投影幾何和卷積運算等。
目前自動駕駛行業中的大多數公司在其車輛傳感器套件中都將攝像頭作為其主要傳感器。攝像頭是一個豐富的傳感器,可以捕獲有關車輛周圍的環境細節。
攝像頭捕獲的外界信息對于場景理解任務(例如對象檢測,分割和識別)特別有幫助。 外界信息使我們能夠區分道路標志或交通信號燈狀態,跟蹤轉向信號并將重疊的車輛分解為單獨的實例。 由于其高分辨率輸出,與自動駕駛中使用的其它傳感器相比,該攝像機能夠收集并提供豐富的信息,同時價格相對也不高。
下面提供兩個圖片數據鏈接:https://www.shutterstock.com/image-photo/busy-traffic-during-rush-houramsterdam-
1069610642?src=bLnVCTgF8bcUNe81sHDlVw-1-39
攝像機鏈接:https://www.shutterstock.com/zh/video/clip-1022389735-camerarepair-sensor-digital-close-up-matrix
1.2 Pinhole Camera Model
下面我們介紹針孔相機模型,用于描述外界中的某個點與其在圖像平面上投影之間的關系。
針孔相機模型中兩個最重要的參數是針孔與圖像平面之間的距離,我們稱為焦距,焦距定義了投射到圖像上的物體的尺寸,并且在相機對焦時起著重要作用。針孔中心的坐標,我們稱為相機中心。盡管針孔攝像頭模型非常簡單,但是它在表示圖像創建過程中卻表現出色。
通過確定特定相機配置的焦距和相機中心,我們可以數學描述世界上某個物體發出的光線撞擊圖像平面的位置。針孔攝像機模型的一個歷史示例是攝像機暗箱。它的結構簡單,在成像表面的前面有一個針孔,可以很容易地重建圖像,實際上,如果傾斜的話,這是觀看日食的方法。
1.3 Modern Day Cameras
自從相機暗箱發明以來,相機發展走了很長一段路。當前的相機使我們能夠收集極高分辨率的數據。
相機傳感器的分辨率和靈敏度不斷提高,使相機成為地球上最普遍使用的傳感器之一。你擁有幾臺相機呢?如果你停止統計所有這些,你會感到驚訝。你的手機,汽車,筆記本電腦中都配備攝像頭,這些攝像頭幾乎無處不在。
2. Camera Projective Geometry
2.1 Projection: World to Image
如下左圖所示,我們對交通信號燈進行投影,會得到一個翻轉的圖像。但這不是我們最終想要的結果,為了解決這個問題,通常在相機中心前面會定義一個虛擬圖像平面,我們將這個虛擬圖像平面稱為相機模型。
將相機模型進行簡化,需要開發一個模型,將世界坐標上的點(X,Y,Z)(X,Y,Z)(X,Y,Z)轉換為圖像坐標(u,v)(u,v)(u,v)。
我們可以定義一個平移矢量ttt和一個旋轉矩陣RRR來模擬世界坐標系與另一個坐標系之間的轉換,將相機姿態參數稱為外部參數,因為它們在相機外部,并且特定于相機在世界坐標系中的位置。我們將圖像坐標系定義為從光學中心發出的虛擬圖像平面的坐標系。但是,圖像像素坐標系附加到虛擬圖像平面的左上角。接下來,我們定義焦距fff為相機和圖像坐標系之間沿相機坐標系的zzz軸距離。
2.2 Computing the Projection
我們將投影簡化為兩個步驟。首先需要從世界坐標投影到相機坐標,然后從相機坐標投影到圖像坐標。
現在介紹一些投影轉換用到的專業術語。
首先,是世界坐標投影到相機坐標。這是通過使用剛體變換矩陣TTT執行的,包括旋轉矩陣RRR和平移向量ttt。
然后是將相機坐標轉換為圖像坐標。為了執行此轉換,定義內參矩陣KKK,是相機的固有參數。
由于這兩個變換都進行了矩陣相乘操作,因此我們可以將矩陣P定義為P=K[R∣t]P=K[R|t]P=K[R∣t],即世界坐標到圖像坐標的變換矩陣。
現在我們來看一個例子,將世界坐標中的點OworldO_{world}Oworld?轉換為圖像坐標oimageo_{image}oimage?,讓我們看看在計算此方程式時缺少什么。我們注意到無法執行矩陣乘法。為了解決這個問題,我們將點O的坐標轉換為齊次坐標。
oimage=[xyz]=K[R∣t][XYZ1]o_{\text {image}}=\left[\begin{array}{l}x \\ y \\ z\end{array}\right]=K[R \mid t]\left[\begin{array}{l}X \\ Y \\ Z \\ 1\end{array}\right]oimage?=???xyz????=K[R∣t]?????XYZ1??????
現在,我們需要執行最后一步,將圖像坐標轉換為像素坐標。我們可以通過將xxx和yyy除以zzz來獲得圖像平面中的像素坐標。
[xyz]→[uv1]=1z[xyz]\left[\begin{array}{l}x \\ y \\ z\end{array}\right] \rightarrow\left[\begin{array}{l}u \\ v \\ 1\end{array}\right]=\frac{1}{z}\left[\begin{array}{l}x \\ y \\ z\end{array}\right]???xyz????→???uv1????=z1????xyz????
2.3 The Digital Image
我們已經完成了投影變換,現在我們定義圖像中的坐標值。我們先從灰度圖像開始。首先將圖像的寬度NNN和高度MMM定義為圖像的列數和行數。 在灰度圖像中,亮度信息以無符號的八位整數形式寫入每個像素。
對于彩色圖像,我們具有值為3的三維尺寸,我們稱之為深度。此深度的每個通道代表圖像中存在多少特定顏色。可以使用許多其他顏色表示,但是在這里我們使用RGB表示,即紅色,綠色,藍色??傊?#xff0c;圖像由三個像素陣列以M×N數字表示,每個像素代表3D點在2D圖像平面上的投影。
3. Camera Calibration (重點)
3.1 Problem Formulation
讓我們回憶到目前為止我們已經學到的投影方程??梢允褂冒獠亢凸逃袇档南鄼C投影矩陣PPP將3D空間中點OOO的齊次坐標轉換為圖像坐標。
相機標定問題的定義是找到這些未知的內在和外在相機參數,此處給定nnn個已知3D點坐標及其在圖像平面上的對應投影,以紅色顯示。我們的方法將包括首先獲取PPP矩陣,然后將其分解為內在參數KKK和外在旋轉參數RRR和平移參數ttt。
為了進行標定,我們使用已知幾何形狀的場景從2D圖像中獲取3D點的位置,通過測量圖像中觀察到的點之間的實際3D距離來解決比例尺問題。
最常用的示例是3D棋盤,其已知大小的正方形提供了要觀察的固定點位置。我們以黃色定義坐標框架,然后計算3D點坐標及其在圖像中的投影??梢允謩油瓿?D點與2D投影的關聯(例如,通過單擊紫色點,或使用棋盤檢測器自動完成)。然后,我們可以建立方程組來求解PPP的未知參數?,F在,讓我們形成需要求解的線性方程組。
首先,我們通過矩陣乘法將投影方程擴展為三個方程。
su=p11X+p12Y+p13Z+p14sv=p21X+p22Y+p23Z+p24s=p31X+p32Y+p33Z+p34\begin{aligned} s u &=p_{11} X+p_{12} Y+p_{13} Z+p_{14} \\ s v &=p_{21} X+p_{22} Y+p_{23} Z+p_{24} \\ s &=p_{31} X+p_{32} Y+p_{33} Z+p_{34} \end{aligned}susvs?=p11?X+p12?Y+p13?Z+p14?=p21?X+p22?Y+p23?Z+p24?=p31?X+p32?Y+p33?Z+p34??
為了使這些方程式的右側為零,我們將每個方程式的右側移到左側。然后,將第三個方程式代入方程式一和方程式二,最后每一點有兩個方程式。
p31Xu+p32Yu+p33Zu+p34u?p11X?p12Y?p13Z?p14=0p31Xv+p32Yv+p33Zv+p34v?p21X?p22Y?p23Z?p24=0p_{31} X u+p_{32} Y u+p_{33} Z u+p_{34} u-p_{11} X-p_{12} Y-p_{13} Z-p_{14}=0\\p_{31} X v+p_{32} Y v+p_{33} Z v+p_{34} v-p_{21} X-p_{22} Y-p_{23} Z-p_{24}=0p31?Xu+p32?Yu+p33?Zu+p34?u?p11?X?p12?Y?p13?Z?p14?=0p31?Xv+p32?Yv+p33?Zv+p34?v?p21?X?p22?Y?p23?Z?p24?=0
因此,如果我們有nnn個點,則我們有2n2n2n個相關方程。將這些方程式以矩陣形式給出我們所示的齊次線性系統。由于這是齊次線性系統,因此我們可以使用奇異值分解來獲得最小二乘解。
[X1Y1Z110000?u1X1?u1Y1?u1Z1?u10000X1Y1Z11?v1X1?v1Y1?v1Z1?v1????????????XNYNZN10000?uNXN?uNYN?uNXN?uN0000XNYNZNX1?vNXN?vNYN?vNYN?uN][p11p12p13p14p21p22p23p24p31p32p33p34]=0\left[\begin{array}{ccccccccccc}X_{1} & Y_{1} & Z_{1} & 1 & 0 & 0 & 0 & 0 & -u_{1} X_{1} & -u_{1} Y_{1} & -u_{1} Z_{1} & -u_{1} \\ 0 & 0 & 0 & 0 & X_{1} & Y_{1} & Z_{1} & 1 & -v_{1} X_{1} & -v_{1} Y_{1} & -v_{1} Z_{1} & -v_{1} \\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots \\ X_{N} & Y_{N} & Z_{N} & 1 & 0 & 0 & 0 & 0 & -u_{N} X_{N} & -u_{N} Y_{N} & -u_{N} X_{N} & -u_{N} \\ 0 & 0 & 0 & 0 & X_{N} & Y_{N} & Z_{N} & X_{1} & -v_{N} X_{N} & -v_{N} Y_{N} & -v_{N} Y_{N} & -u_{N}\end{array}\right]\left[\begin{array}{c}p_{11} \\ p_{12} \\ p_{13} \\ p_{14} \\ p_{21} \\ p_{22} \\ p_{23} \\ p_{24} \\ p_{31} \\ p_{32} \\ p_{33} \\ p_{34}\end{array}\right]=0????????X1?0?XN?0?Y1?0?YN?0?Z1?0?ZN?0?10?10?0X1??0XN??0Y1??0YN??0Z1??0ZN??01?0X1???u1?X1??v1?X1???uN?XN??vN?XN???u1?Y1??v1?Y1???uN?YN??vN?YN???u1?Z1??v1?Z1???uN?XN??vN?YN???u1??v1???uN??uN???????????????????????????????p11?p12?p13?p14?p21?p22?p23?p24?p31?p32?p33?p34???????????????????????=0
3.2 Linear Methods
簡單的線性標定方法具有多個優點。
- 易于制定。
- 具有封閉形式的解決方案。
其缺點是:
- 無法直接獲取內部和外部相機參數。
- 我們的線性模型沒有考慮復雜的情況,例如徑向和切向畸變。
- 最后,由于我們是通過線性最小二乘法進行求解的,無法對我們的解決方案施加約束,例如要求焦距為非負值。
3.3 Factoring and Factorizing the P matrix
相機投影矩陣PPP本身可用于將3D點投影到2D中,但是它有幾個缺點。它不會告訴相機的姿勢,也不會告訴相機的內部幾何形狀。幸運的是,我們可以使用稱為RQRQRQ分解的線性代數運算,將PPP分解為內在參數矩陣KKK和外部旋轉參數RRR和平移參數$$t。
讓我們看看我們如何執行這種分解。首先,將PPP的表示形式更改為相機中心CCC的函數。CCC是與P相乘時投影為零的點。我們將KKK乘以矩陣以形成兩個子矩陣KRKRKR和?KRC-KRC?KRC。我們將KKK和RRR的組合稱為MMM矩陣。
PC=0K[R∣t]C=0K(RC+t)=0t=?RCP=K[R∣?RC]P=[KR∣?KRC]P C=0 \\K[R \mid t] C=0 \\K(R C+t)=0 \\t=-R C \\P=K[R \mid-R C] \\P=[K R \mid-K R C]PC=0K[R∣t]C=0K(RC+t)=0t=?RCP=K[R∣?RC]P=[KR∣?KRC]
現在我們可以將投影矩陣PPP表示為MMM和?MC-MC?MC。已知可以將任何矩陣分解為上三角矩陣RRR和正交基,將MMM分解為上三角R和正交基Q。在線性代數中,此過程稱為RQ分解,即QR分解的一種更常見的變體。在QR分解中,我們首先有正交Q,然后是上三角R。請注意,RQ分解的輸出與旋轉矩陣R是不同的變量,不要混淆它們。
現在,讓我們看看如何通過對齊這兩個表達式來使用矩陣M的RQ因式分解的輸出來檢索K,R和t。
固有校準矩陣K是RQ分解的輸出R。旋轉矩陣R是正交基Q。
M=RQ=KRM=\mathcal{R} Q=K RM=RQ=KR
最后,我們可以直接從P矩陣最后一列的K中提取轉換向量。
t=?K?1P[:,4]=?K?1MCt=-K^{-1} P[:, 4]=-K^{-1} M Ct=?K?1P[:,4]=?K?1MC
3.4 Calibration Tools – SUPPLEMENTAL MATERIALS
下面是相機標定常用的軟件工具。
- OpenCV: https://docs.opencv.org/master/d4/d94/tutorial_camera_calibration.html
- Matlab: https://www.mathworks.com/help/vision/ug/single-camera-calibrator-app.html
- ROS: http://wiki.ros.org/camera_calibration
4. Visual Depth Perception - Stereopsis (重點)
4.1 Overview
自動駕駛汽車需要具備十分準確的深度感知能力,以確保汽車安全運行。如果不知道前方汽車有多遠,那么在開車時如何避免它們呢?激光雷達和毫米波雷達通常被認為是可用于感知任務的3D傳感器。但是,我們也可以使用多視圖幾何結構從兩個或多個攝像機獲得深度信息,在自動駕駛汽車中常用到立體攝影機。
立體視覺最早是在1838年由Charles Wheatstone所提出。他提出,因為每只眼睛從略微不同的水平位置觀看世界,所以每只眼睛看到的圖像彼此并不相同。由于兩眼的水平位置不同,從而給出了水平視差的深度提示,也稱為雙眼視差。但是,在歷史上,立體視覺的發現要早于此。實際上,萊昂納多·達·芬奇(Leonardo da Vinci)的一些圖紙也通過立體視覺描繪了精確的深度幾何形狀。
現在,我們深入研究立體聲傳感器的幾何形狀。立體聲傳感器通常由具有平行光軸的兩個攝像機組成,通常也會稱為雙目相機。
4.2 Stereo Camera Model
已知兩個攝像機之間的旋轉和平移關系以及3D3D3D點OOO在兩個攝像機上的投影,像素位置分別為OLOLOL和OROROR,我們可以計算出點OOO的3D3D3D坐標。
為了使計算更容易,我們做一些假設。
- 首先,假設用于構造立體聲傳感器的兩個攝像機是相同的。
- 其次,假設在制造立體聲傳感器時,盡最大努力使兩個攝像機的光軸對齊。
現在讓我們定義立體聲傳感器的一些重要參數。焦距仍然是相機中心與圖像平面之間的距離。其次,基線為左右相機中心之間的距離。
為方便處理,我們將投影圖轉換為鳥瞰圖以便于可視化。如下所示,我們得到了兩個相似三角形,根據三角形相似,我們得到兩個方程:
Zf=XxL\frac{Z}{f}=\frac{X}{x_{L}}fZ?=xL?X?
Zf=X?bxR\frac{Z}{f}=\frac{X-b}{x_{R}}fZ?=xR?X?b?
通過以上方程,我們就可以得到深度信息。
4.3 Computing 3D Point Coordinates
現在我們計算3D坐標,我們將視差ddd定義為左右圖像中同一像素的圖像坐標之間的差。視差公式為:
d=xL?xRd=x_{L}-x_{R}d=xL??xR?
根據上一小節建立的相機模型,深度Z為:
Z=fbd\\Z=\frac{f b}ze8trgl8bvbqZ=dfb?
然后我們也可以到到XXX和YYY:
X=ZxLf,Y=ZyLfX=\frac{Z x_{L}}{f}, \quad Y=\frac{Z y_{L}}{f}X=fZxL??,Y=fZyL??
現在,我們已經知道了如何從立體傳感器計算3D坐標。這里出現了兩個小問題。
- 首先,我們需要計算焦距,基線。也就是說,我們需要標定立體攝像機。
- 其次,我們需要找到每個左右圖像像素對之間的對應關系,以便能夠計算它們的視差,這部分可以通過視差估計算法得到。
5. Visual Depth Perception - Computing the Disparity
5.1 Overview
為了計算視差,我們需要能夠在左右立體攝像機圖像中找到相同的點。 對于此類問題,最直接的解決辦法是窮舉法,即在左邊的圖像中確定像素位置,然后在右邊圖像中搜尋所有像素,找到與之相匹配的。 但時這種方法效率極低,通常不會用于自動駕駛汽車。
5.2 Disparity Computation
讓我們重新看一下立體相機的設置,看看為什么這樣的簡化處理是有效的。我們已經確定了如何將單個點投影到兩個攝像機。
現在,沿著連接3D點和左側攝像機中心的線移動它。它在左攝像機圖像平面上的投影不變。但是,注意到右攝像機平面上的投影,該投影沿水平線移動。這條水平線被稱為對極線。我們可以將對應搜索限制在對極線上,從而將搜索范圍從2D2D2D減少到1D1D1D,即從平面搜索變為線段搜索。
要注意的一件事是,水平對極線僅在兩個攝像機的光軸平行時才會出現。在不平行的光軸的情況下,對極線偏斜。在這種情況下,我們將不得不得出多視圖幾何圖形,這超出了本課程的介紹范圍。在經過兩次校準的情況下(例如我們的立體聲相機),傾斜的對極線不是一個大問題。實際上,我們可以通過稱為立體整流的過程使光軸平行。校正后,我們回到水平極線。這里將不介紹如何執行校正,因為標準計算機視覺軟件包(例如OpenCV和MATLAB)中提供了實現方式。
5.3 Stereo Matching
現在我們將介紹我們的第一個基本立體匹配算法。對于每條對極線,在左側圖像上取一個像素,將這些左圖像像素與同一對極線上的右圖像中的每個像素進行比較。接下來,選擇最接近左像素的右圖像像素,這可以通過最小化成本來實現。
例如,這里的成本可以是像素強度的平方差。最后,我們可以通過從左邊減去右邊的圖像位置來計算視差。
關于立體匹配問題,這里給出了一個一個調查鏈接,感興趣的讀者可以看看。
6. Image Filtering
6.1 Overview
現在讓我們開始探討為什么要使用圖像濾波。圖像形成過程容易受到許多不同噪聲的影響。在下圖有一位攝影師,這是麻省理工學院的一張非常著名的照片,用于測試計算機視覺算法。
現在,讓我們通過隨機將某些像素變為白色而將其他像素變為黑色,來向該圖像添加噪聲。我們如何從如此嘈雜的圖像中檢索出原始圖像的合理視覺外觀呢?圖像濾波是消除噪聲的簡單有效的方法。您還將看到,根據過濾器的不同,可以有效地對圖像執行各種操作。但首先,讓我們看看如何進行圖像過濾有助于降低噪聲。
如果查看圖像陣列,則會注意到噪聲通常會導致像素值異常,高值鄰域中的低值像素或低值鄰域中的高值像素。減少這種噪聲的一種方法是計算整個鄰域的平均值,并用該平均值替換離群值像素。讓我們將GGG定義為濾波操作的輸出。這里,2k+12k+12k+1是濾波器的大小。在這種情況下,我們鄰域的大小為3。 uuu和vvv是中心像素圖像坐標。計算平均值得出右上部鄰域為80,左下部鄰域為10。最后一步是用相應的均值替換每個鄰域的中心像素。至此,我們成功地降低了噪聲并平滑了該鄰域中的圖像陣列值。
6.2 Cross-Correlation
權重矩陣HHH稱為核。這種通用形式稱為互相關,因為它定義了每個彼此像素之間以及附近其他像素彼此之間的相關性 。對于上面定義的均值濾波器,我們現在使用以下內核表示。一個3×33\times33×3的矩陣,t充為1。另一個用作降噪的內核是高斯內核,其中中心的權重大于相鄰的權重,權重依次按高斯分布。
現在,讓我們將這些內核嵌入我們的圖像,下面是兩種濾波器效果。均值濾波器導致圖像有些模糊,我們可以通過調整濾波器的特定參數來減少這種模糊。
6.3 Convolution
現在,我們將定義另一個用于圖像過濾的有用操作:卷積。
關于卷積知識的介紹可以看看吳恩達老師的深度學習課程或文章《4.1)深度卷積網絡:卷積神經網絡基礎》。
6.4 Applications
現在讓我們介紹互相關和卷積運算的一些重要應用?;ハ嚓P可用于模板匹配。模板匹配是我們已知圖案或模板,我們想在圖像中找到其對應位置的問題。這可以通過在模板和圖像之間找到互相關輸出的最高值的位置來完成。
為了更好地可視化此效果,讓我們將互相關的彩色輸出疊加在目標圖像之上。在這里,紅色是較高的互相關響應,而藍色是非常低的響應。這樣,模板和圖像的位置就是互相關輸出中具有最高值的像素的u,vu,vu,v坐標。我們可以通過將模板疊加在剛剛找到的u,vu,vu,v坐標上來檢查我們的相關性是否正確。
可以使用卷積執行的另一個重要應用是圖像梯度計算??梢酝ㄟ^與執行有限差分的內核進行卷積來計算圖像梯度。圖像梯度對于邊緣和拐角的檢測非常有用,例如在自動駕駛中廣泛用于圖像特征和物體檢測。
總結,在本講中我們學到了:
- 如何表示數字圖像。
- 3D點如何與圖像中的像素相關。
- 如何從一對圖像計算3D點坐標,
- 如何使用互相關和卷積運算處理圖像。
總結
以上是生活随笔為你收集整理的Coursera自动驾驶课程第8讲:Basics of 3D Computer Vision的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iwctrl.exe是什么进程 iwct
- 下一篇: isstart.exe是什么进程 iss