隨着理解的加深,我又更新了一下,比之前更標準一些:
經過好幾天對於slam裏那好幾個平面的倒來倒去,零基礎的我快要瘋掉了,還好我理出了些頭緒,和大家一起分享。
我們從頭開始一步一步理一下:
1、首先從相機座標系開始吧,物點在相機座標系下所在的平面叫做物平面(當然還有世界座標系,但是那個就涉及外參了,本文暫不討論那個);
2、物平面的點通過小孔成像後,投到成像平面(相機光心之後),雖然此時的面是真正的成像平面,但是此時得到的座標是負的,很麻煩的;
3、爲了方便計算我們把該成像平面放到相機之前,並且以後都這麼算,然後把此平面叫做成像平面,注意此時推到過程是:將X和Y座標乘以f(焦距)除以Z(z座標),因爲此過程會將3D轉化成2D,所以Z肯定要被消去,這樣理解可能更直觀,最具說服力的還是三角形相似拉;又因爲平行光成像都成在焦平面嘛,所以乘以f是理所應當的;
4、由於此時單位依舊是米,我們最終得到的可是像素座標,單位是像素,所以還需要一個米與像素之間的縮放。公式裏是α和β,當然我們還需要把整個點挪到像素原點去,像素圖像的原點在左上角,圖形的原點在中心,此時有一個cx,cy的平移,但是面的位置沒有改變,但是性質變了,已經成爲像素平面了,單位是pixel。
現在回頭看,我們需要做的是:
① 把第2步省去,因爲加負號不是我們想要的,所以我們的腦海裏將不再有相機之後的平面了;
② 推導出歸一化平面,把第3步分開,先除Z,此時物平面就轉到了相機前單位距離處,這時歸一化平面就有了。之後再乘以f,讓歸一化平面回到成像平面;
③ 把乘f,米與像素的縮放(α、β),平移(cx,cy)整合成內參矩陣K。
所以最終的過程就是從物平面除以Z變成歸一化平面,乘以f變成成像平面,縮放平移變成像素平面,也可以乘以內參由歸一化平面變成像素平面。我們平時用歸一化平面多一些,畢竟齊次嘛,可以忽略物點深度的影響。這樣看來,由近及遠以此是:相機平面,歸一化平面(1),成像平面(f),像素平面(f)
再來一張自己做的一張圖吧,可能和別的博主有相似的地方:
本文沒涉及外參(也同相機位姿)只有內參