計算機視覺 3D 重建—側(cè)重無人駕駛
最近沉浸了一段時間,沉浸不等于放棄,而是一種醞釀的過程。那么接下來我們就來分享一下這一段時間自己整理的干貨。跟著我,相信會有所得,也希望自己也辛苦沒有白費。代理如何從理論到實踐來實現(xiàn)一個無人駕駛系統(tǒng)。這里說一下,分享內(nèi)容會由淺入深,會做得足夠細致,這樣一來開始你可能會感覺有些枯燥,甚至乏味。不過只要大家耐著性子看下去,相信會有所搜索。
對讀者的一點要求
這里妄自稱你們讀者,其實各位都是我的朋友和老師。這次分享雖然足夠簡單、足夠細致,但是還是會有一定門檻的。需要具有基礎(chǔ)的高等數(shù)學和線性代數(shù)方面的知識,只要這樣你才能夠理解文章出現(xiàn)的公式和概念。但不必過于擔心,只是基礎(chǔ),無需深入,也就是不能再基礎(chǔ)的概念有所了解。
對自己的一點要求
這一次對自己也提了一點要求,不能只顧自己 high。自己除了繼續(xù)專注內(nèi)容,也會花一些心思在文章設(shè)計上,如何讓自己文字讀起來有趣同時,如何讓邏輯上是環(huán)環(huán)相扣以便于大家閱讀,如何將晦澀抽象內(nèi)容說的淺顯易懂。這些都是自己在隨后文章逐漸改善和加強的方面。
會談到哪些技術(shù)
我們主要專注于兩個技術(shù),分別是計算機視覺技術(shù)和 SLAM 技術(shù),無論是深度學習在計算機視覺領(lǐng)域的應用還是 SLAM 技術(shù)其實都是基于計算機視覺,所以個人覺得很有必要先普及一下計算機視覺基礎(chǔ)知識。
3 維重建是自己相對于來說比較感興趣的方向,所謂 3 維重建,就是基于單張圖像或者多張圖像來將 3D 環(huán)境重新構(gòu)建出來。這部分內(nèi)容雖然有趣,但是要想掌握這部分內(nèi)容其實并非易事,因為這部分內(nèi)容會涉及到許多領(lǐng)域的知識。這是一次從 3D 世界到 2D 世界的轉(zhuǎn)換,或者說是映射。在轉(zhuǎn)換過程中深度信息將會丟失或者是換一種表達方式。完成這個映射的就是攝像機。
小孔攝像機
將膠片直接放置在物體前方是我們將 3 維世界直接映射到圖像上一種最簡單,也是最直觀的做法,不過這樣做的問題也是顯而易見,膠片上每一個點都接受到環(huán)境中多個的物體發(fā)送出光線(信息)。所以最終在膠片上的圖像都是模糊的,很難記錄下真實世界中物體的信息。
那么如何在攝像機和膠片間放上一個隔板,隔板的中間開上小孔,這樣一來物體發(fā)射光線經(jīng)過小孔后就不會發(fā)散,通過帶有小孔的隔板就可以減少模糊,也就是物體上點與圖像上的點形成了一一對應的關(guān)系,從而得到清晰的圖像。
這里會利用到三角形相似法則,紅色表示的成像平面就是像平面,那么像平面到小孔的距離為 f,f 也就是我們熟悉的焦距。這里小孔就是光圈,還就是我們通常研究的是和像平面關(guān)于小孔對稱的虛擬像平面。小孔到成像物體的距離用 z 來表示。
那么根據(jù)三角形相似法則就可以得到上面的公式,從上面公式不難看出當相機(小孔)和物體之間距離 z 固定情況,調(diào)整焦距 f 也就是成像平面到小孔之間的距離,可以調(diào)整成像的大小。相機坐標系是在光心處建立的 3 維坐標系,而在像平面上建立的是坐標系 2 維坐標系。這里 p 點為相機坐標系中的點,x、y 和 z 表示 p 點的坐標,而 p prime 表示 p 點在成像平面中的對應地點,x 和 y prime 分別表示該點在成像平面的坐標。
我們從一個軸 y 來考慮一下成像平面 y prime 攝像機坐標系中 y 的對應關(guān)系。
通過這個關(guān)系就可以將空間點映射到像平面上的坐標。
通過上面的圖,我們可以看出調(diào)整光圈的大小對成像的影響。上面圖下標數(shù)值表示是在該大小光圈下拍攝的圖像,我們可能會發(fā)現(xiàn)在 2mm 光圈成像是無法清晰成像的,而在 0.35mm 就可以清楚地看出字母 LUZ。光圈越小圖像就越清晰,而調(diào)整光圈變大后圖像就變得模糊,這是因為調(diào)整光圈變大后膠片上一個點就對應真實世界的多個點,所以造成模糊的效果。當縮小光圈時,到達膠片上的光線就變少了,所以調(diào)小光圈后圖像就會變暗。
為了解決這個光線到達成像平面變少問題,才引入了透鏡。
不過小孔成像的缺點就是,因為光線不足所以最終造成了成像平面會比較暗。通過引入透鏡后成像物體的多條光線通過透鏡后會聚集到成像平面上一點,這樣也就解決了成像物體光線不足的問題。凸透鏡兩個特性是所有平行于光軸的光線都會會聚到焦點,焦點到透鏡中心點的距離稱為焦距。穿過透鏡中心的光線的方向是不會發(fā)生改變的。透鏡焦距是跟透鏡球面半徑 R 和透鏡折射系數(shù) n 有關(guān)系的,公式如下:
那么從透鏡到成像平面距離為 b 這里隨后就只會考慮。 b 而不會再去考慮 f 和 z_0 。雖然透鏡解決了光線不足的問題,但是透鏡成像并非完美,還存在同樣透鏡成像并非完美,通常也存在問題,接下來就會提及失焦和徑向畸變的問題。
失焦
在第一圖像中,成像平面放在焦點處可以得到一個清晰的小光斑,可以看到清晰成像物體,在第二張和第三張圖像中成像片面分別位于焦點前方或者后方都會得到一個模糊的圖像,這就是失焦的現(xiàn)象。
徑向畸變
透鏡的第二個問題就是徑向畸變,圖像像素點以畸變中心為中心點,沿著徑向產(chǎn)生的位置偏差,從而導致圖像所成的像發(fā)生形變。
這里分別列出枕形畸變(pincushion distortion)和桶形畸變(barrel distortion)。枕形畸變:又稱鞍形形變,視野中邊緣區(qū)域的放大率遠大于光軸中心區(qū)域的放大率,常用在遠攝鏡頭中(上圖中)。桶形畸變,與枕形畸變相反,視野中光軸中心區(qū)域的放大率遠大于邊緣區(qū)域的放大率,常出現(xiàn)在廣角鏡頭和魚眼鏡頭中(上圖右)。
像平面到像素平面
攝像機幾何中,如何將像素平面上的點對應到攝像機坐標上,有兩點需要注意,第一點是像素到米之間單位轉(zhuǎn)換,相機坐標系通常是以米為單位,而在圖像平面內(nèi)是以像素為單位。第二點坐標點的位置,通常在圖像中。
偏置
通常在圖像平面我們喜歡以圖像左上角作為原點,而在攝像機坐標系是以攝像頭中心點為原點,這樣攝像機坐標中心和圖像的中心之間就存在偏差用和
來表示偏差,在攝像機的點 (x, y, z) 。
單位變換
這里 k 和 l 表示一米有多少個像素,這兩個參數(shù)是攝像機感光元件所決定的。因為像素可能不是方形的,所以 k 和 l 值可能不相等。
可以用 alpha 或者 beta 來表示 fk 和 fl 一來可以簡化公式的表達為如下公式:
(u,v) 與 z 不是一個常數(shù),而是一個變量 u,v 與 x, y 不是線性關(guān)系,因為這里還有一個 z 是變量,那么我們就希望找到 u,v 到 x,y 線性變換,這里介紹一下齊次坐標的概念。