视觉SLAM十四讲第五讲
生活随笔
收集整理的這篇文章主要介紹了
视觉SLAM十四讲第五讲
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第五章 相機與圖像
主要目標
在計算機中,一張照片由很多個像素組成,每個像素記錄了色彩或亮度的信息。三維世界中的一個物體反射或發出的光線,穿過相機光心后,投影在相機的成像平面上。相機的感光器件接收到光線后,產生測量值,就得到了像素,形成了我們見到的照片。
一、相機模型
1)針孔相機模型
設 O-x-y-z 為相機坐標系,習慣上我們讓z 軸指向相機前方,x 向右,y 向下(此圖我們應該站在左側看右側)。O 為攝像機的光心,也是針孔模型中的針孔。現實世界的空間點 P,經過小孔 O 投影之后,落在物理成像平面 O′ - x′ -y′ 上,成像點為 P′。設 P 的坐標為 [X, Y, Z]T,P′ 為 [X′, Y ′, Z′]T,并且設物理成像平面到小孔的距離為f(焦距)。那么,根據三角形相似關系,有:
其中負號表示成的像是倒立的。不過,實際相機得到的圖像并不是倒像(否則相機的使用會非常不方便)。為了讓模型更符合實際,我們可以等價地把成像平面對稱地放到相機前方,和三維空間點一起放在攝像機坐標系的同一側,這樣做可以把公式中的負號去掉,使式子更加簡潔:
把 X′, Y ′ 放到等式左側,整理得:
為了描述傳感器將感受到的光線轉換成圖像像素的過程,我們設在物理成像平面上固定著一個像素平面 o-u-v。我們在像素平面得到了 P′ 的像素坐標:[u, v]T。
像素坐標系通常的定義方式是:原點 o′ 位于圖像的左上角,u 軸向右與 x 軸平行,v 軸向下與 y 軸平行。像素坐標系與成像平面之間,相差了一個縮放和一個原點的平移。我們設像素坐標在u 軸上縮放了 α 倍,在 v 上縮放了 β 倍。同時,原點平移了 [cx, cy]T。那么,P′ 的坐標與像素坐標[u, v]T 的關系為:
把 αf 合并成 fx,把 βf 合并成 fy,得:
其中,f 的單位為米,α, β 的單位為像素/米,所以 fx, fy 和 cx, cy 的單位為像素。
我們把中間的量組成的矩陣稱為相機的內參數矩陣(Camera Intrinsics)K。通常認為,相機的內參在出廠之后是固定的,不會在使用過程中發生變化。
由于相機在運動,所以 P 的相機坐標應該是它的世界坐標(記為 Pw)根據相機的當前位姿變換到相機坐標系下的結果。相機的位姿由它的旋轉矩陣 R 和平移向量 t 來描述。那么有:
它描述了 P 的世界坐標到像素坐標的投影關系。其中,相機的位姿 R, t 又稱為相機的外參數(Camera Extrinsics)。相比于不變的內參,外參會隨著相機運動發生改變,同時也是 SLAM 中待估計的目標,代表著機器人的軌跡。
我們可以把一個世界坐標點先轉換到相機坐標系,再除掉它最后一維的數值(即該點距離相機成像平面的深度),這相當于把最后一維進行歸一化處理,得到點 P 在相機歸一化平面上的投影:
歸一化坐標可看成相機前方z = 1 處的平面上的一個點,這個 z = 1 平面也稱為歸一化平面。歸一化坐標再左乘內參就得到了像素坐標,所以我們可以把像素坐標 [u, v]T 看成對歸一化平面上的點進行量化測量的結果。
2)畸變
由透鏡形狀引起的畸變(Distortion,也叫失真)稱為徑向畸變。它們主要分為兩大類:桶形畸變和枕形畸變。
除了透鏡的形狀會引入徑向畸變外,在相機的組裝過程中由于不能使透鏡和成像面嚴格平行也會引入切向畸變。
3)單目相機成像過程
1.首先,世界坐標系下有一個固定的點 P,世界坐標為 Pw。
2.由于相機在運動,它的運動由 R, t 或變換矩陣 T ∈ SE(3) 描述。P 的相機坐標為 P?c =RPw + t。
3.這時的 P?c 的分量為 X, Y, Z,把它們投影到歸一化平面 Z = 1 上,得到 P 的歸一化坐標:Pc = [X/Z, Y /Z, 1]T。
4.有畸變時,根據畸變參數計算 Pc 發生畸變后的坐標。
5.最后,P 的歸一化坐標經過內參后,對應到它的像素坐標:Puv = KPc。
4)雙目相機模型
通過同步采集左右相機的圖像,計算圖像間視差,來估計每一個像素的深度。
雙目相機一般由左眼相機和右眼相機兩個水平放置的相機組成。它們是水平放置的,意味著兩個相機的光圈中心都位于 x 軸上。兩者之間的距離稱為雙目相機的基線(Baseline,記作 b),是雙目相機的重要參數。
現在,考慮一個空間點 P,它在左眼相機和右眼相機各成一像,記作 PL, PR。由于相機基線的存在,這兩個成像位置是不同的。理想情況下,由于左右相機只在 x 軸上有位移,因此 P 的像也只
在 x 軸(對應圖像的 u 軸)上有差異。記它的左側坐標為 uL,右側坐標為 uR,根據 △P PLPR 和 △P OLOR 的相似關系,有:
稍加整理,得:
其中 d 定義為左右圖的橫坐標之差,稱為視差(Disparity)。根據視差,我們可以估計一個像素與相機之間的距離。視差與距離成反比:視差越大,距離越近。
5)RGB-D 相機模型
目前的 RGB-D 相機按原理可分為兩大類:
1.通過紅外結構光(Structured Light)來測量像素距離的。例子有 Kinect 1 代、Project Tango 1代、Intel RealSense 等。
2 通過飛行時間法(Time-of-flight,ToF)原理測量像素距離的。例子有 Kinect 2 代和一些現有的 ToF 傳感器等。
RGB-D 相機能夠實時地測量每個像素點的距離。但是,由于這種發射 ? 接收的測量方式,其使用范圍比較受限。用紅外光進行深度值測量的 RGB-D 相機,容易受到日光或其他傳感器發射的紅外光干擾,因此不能在室外使用。在沒有調制的情況下,同時使用多個 RGB-D 相機時也會相互干擾。對于透射材質的物體,因為接收不到反射光,所以無法測量這些點的位置。此外,RGB-D 相機在成本、功耗方面,都有一些劣勢。
二、圖像
在一張灰度圖中,每個像素位置 (x, y) 對應一個灰度值 I,所以,一張寬度為 w、高度為 h 的圖像,數學上可以記為一個函數:
其中 (x, y) 是像素的坐標。然而,計算機并不能表達實數空間,所以我們需要對下標和圖像讀數在某個范圍內進行量化。
三、實踐:計算機中的圖像
1)OpenCV 的基礎使用方法
從 http://opencv.org/downloads.html 下載,選擇 OpenCV for Linux 版本即可。獲得壓縮包。將它解壓到任意目錄下,可以發現 OpenCV 亦是一個 cmake 工程。
安裝依賴項
sudo apt-get install build-essential libgtk2.0-dev libvtk5-dev libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev
隨后的編譯安裝和普通的 cmake 工程一樣,請在 make 之后,調用 sudo make install 將 OpenCV安裝到你的機器上(而不是僅僅編譯它)。
參考:https://www.cnblogs.com/Shuqing-cxw/p/9195303.html
總結
以上是生活随笔為你收集整理的视觉SLAM十四讲第五讲的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派串口通信
- 下一篇: python写http post请求的四