我們為什麼要進行相機的標定?
相機標定的原理是什麼?
相機的標定在三維重建過程中所起到的作用是什麼?
一般使用什麼方法來進行相機的標定?
這些問題都是筆者在剛接觸標定時產生的疑問。。。筆者作為新手知道新手想要了解到什麼,怎麼解釋才更通俗易懂。
我們先想象一下,相機是如何將現實中的物體呈現在二維上的?
剛體變換(regidbody motion)
在三維空間內,當物體不發生形變時,對幾何物體做旋轉平移操作,稱之為剛體變換。
通俗點說,剛體變換就是將物體從世界座標系(xw,yw,zw)到攝像機座標系(xc,yc,zc)的過程。
對應的數學表示式如下:
首次出現數學表示式,一開始會有點頭疼,這種矩陣形式的表示式在三維重建中將十分常見,仔細看其實也沒什麼,r代表旋轉矩陣,t代表平移向量;x代表物體上的點在空間座標系中的座標,xc代表其在相機座標系對應的點。因剛體變換本身不會發生形變,所以只需要進行旋轉平移就可以將世界座標系與攝像機座標系聯絡起來。
說得很多很囉嗦,有圖!
其由三個方向的θ控制,故具有三個自由度。
透視投影
用中心投影法將形體投射到投影面上,從而獲得的一種較為接近視覺效果的單面投影圖。
這一步是將剛體變換到攝像機座標系(xc,yc,zc)的物體投影到空間影象座標(x,y)
圖中的 f 即ocp就是攝像機的焦距,相機內參;
oc是攝像機的光心;
zc是攝像機的主光軸。
假設在攝像機座標系
有一b(xb,yb)點,根據相似三角形,很容易得到投影在空間影象座標b點的座標(x,y):
離散化
眾所周知,我們拍攝的是以畫素為單位的,我們看到的其實是乙個個小的畫素點組合而成,畫素越高,影象越清晰。
生成的最後一步就是將投影到空間影象座標(x,y)轉換成離散座標(u,v);
(u,v)座標系的原點在的左上角(其實是儲存器的首位址)如下圖所示,單位為數量單位(個);
下圖o點是光軸圖投影平面的焦點(v0,u0)。
對應的變換:
其中dx代表x軸方向乙個畫素的寬度,dy代表y軸方向上乙個畫素的寬度(很多攝像機拍出來的**畫素點都不是正方形的)。dx、dy為攝像機的內引數。(u0,v0)稱為影象平面的主點,也是攝像機的內引數。其實相當於對x軸和y軸的離散化。其可以運用齊次座標,將上式寫成矩陣形式,如下:
到這裡以針***機為例,從空間到影象對應的三個變換就闡述到這裡,不知道筆者有沒有說的明白;
下面是將三個變換對應的矩陣結合起來,即將三個變換矩陣相乘,得到世界座標系(xw,yw,zw)和影象座標系(u,v)的對應關係
下圖是大神部落格中畫的示意圖,一目了然。
說明:
1、上述紅體字是我們做標定所要得到的相機的內參,這就解釋了我們為什麼要做標定。
2、上述矩陣中很多都是其次的,很顯然用其次座標是為了運算的方便。
3、此博文對世界座標系,影象座標系沒有進行說明。具體可參照
部落格的內容,其講得挺詳細的。
三維重建學習之旅(三)相機標定之(2)張正友標定
其中m的齊次座標表示影象平面的畫素座標 u,v,1 m的齊次座標表示世界座標系的座標點 x,y,z,1 a r t 即是上面一篇部落格推出的p。r表示旋轉矩陣 t表示平移矩陣 s表示尺度因子。a表示攝像機的內引數,具體表示式如下 f dx,f dy,因為畫素不是規規矩矩的正方形,代表畫素點在x,y方...
深度相機三維重建
筆者近日學習kinect開發,需要得到指定物體的三維座標,在查閱了眾多資料之後,也有了一點點自己的看法。由於kinect是一款rgb d相機,能夠很容易獲得相應的深度資訊,而至於深度資訊,推薦一篇知乎專欄 然後應該如何處理得到的深度資訊呢,筆者覺得主要有三個步驟 1.首先應該將深度相機的深度影象和色...
基於slam的三維重建 SLAM 三維重建相關資源
有人問不知道去 找slam 三維重建相關資源,1 跟蹤slam前沿動態 更新的很頻繁 track advancement of slam 2 很全視覺slam資料大全,包括 the list of vision based slam visual odometry open source proje...