門戶網站建設工作方案在線優(yōu)化seo
2020年爆火的Nerf(神經輻射場)橫空出世,據(jù)說只要用手機拍照,然后喂給模型,就可以生成3D模型了,我試過了,確有此事!
那我們有想過,為什么可以從二維的圖片里面獲取物體三維的信息嗎?
接下來,我們就追根溯源,先從數(shù)學和物理的角度來看下三維世界的物體如何通過照相機變成二維的圖像信息。
稍微插播:大家支持的話可以關注公眾號 AI知識物語(周更三維重建相關文章), B站 出門吃三碗飯,不定期更新視頻講解
接下來我們將依次介紹下面幾個坐標
世界坐標,相機坐標,歸一化坐標,像素坐標。
首先我們引入一個最簡單的相機模型——針孔相機模型
P:真實世界中的一個點
O:相機的光心,處在相機平面上
P‘:真實世界的點通過光心在成像平面上形成的一個點
在左邊的平面看作是相機內部的成像平面
光心O到成像平面O‘的距離叫f 焦距
P到光心O的距離w設為z
設P坐標 [X,Y,Z]^T
設P’坐標 [X‘,Y‘,Z‘]^T
z和f的距離可以見右圖,通過相似三角形可以得出
我們知道成像平面最終呈現(xiàn)給我們是一張圖片,也就是只有2維的信息,于是我們在 成像平面上引入 像素平面,并在其左上角頂點設立起點坐標系,設P’的像素坐標為 [u,v]^T
像素坐標系相對于成像平面,可看做在u、v軸分別縮放了α和β倍,同時原點平移了
[Cx,Cy]^T,像素坐標推導如下圖:
為了更加美觀,我們把像素坐標變?yōu)辇R次形式,并寫為以上形式
Z:世界空間點到光心距離
K:相機內參矩陣(可以問廠家or自己測;相機如果碰損會影響值)
P:世界空間點的坐標
現(xiàn)在我們已經成功實現(xiàn)了一個數(shù)學模型,輸入空間的一個點,就輸出其通過相機的像素點,是不是很神奇?如果輸入的是很多個點,那么最終就會輸出一幅色彩豐富的圖片啦。
但是,現(xiàn)在我們還有一點要考慮。在上面我們輸入的P是相機坐標下的點坐標,但因為相機的運動關系,P的相機坐標應該是其世界坐標P_world,簡稱P_w ,根據(jù)相機位姿變化的結果。
(也就是說如果需要使用P相機坐標,我們需要知道他的值,可以通過P_w推出)
相機的位姿由他的旋轉矩陣R和平移向量t來確定,將其代入上述公式,代替P
現(xiàn)在,我們得到了式子,他的含義是:
輸入 世界坐標下的點P_w, 先左乘 相機內參矩陣,再右乘 相機外參矩陣T,
值=空間點坐標距離光心距離 右乘 像素坐標
輸出:(Z已知)可以得到其 像素坐標
這樣,我們的空間點在相機的成像過程就順利理順了!
從另一個角度再看,
我們先把世界坐標點P_w轉為P相機坐標系點,再除去其最后一維值,也就是Z(該點距離相
機成像平面的深度),這樣相當于對最后一個維度歸一化(最后一維經過上面操作后變?yōu)?),于是我們得到 相機坐標系的點P在 相機歸一化平面上的投影點。
歸一化坐標可以看作相機前面z=1處的平面有一個點,z=1的平面可以看作歸一化平面,歸一化坐標左乘內參就得到了像素坐標,因此,我們可以把像素坐標看作是對歸一化平面上點量化測量的結果。
這里,如果我們對相機坐標P乘任意非0常數(shù),其歸一化坐標都是一樣的,也即該點的深度在投影失去了信息。因此單目視覺(針孔成像)沒法得到像素點的深度值。該任務需要雙目模型來完成。
另外,本篇文章參考借鑒了高翔的視覺SLAM14講,第5章節(jié),想了解更多細節(jié)請自行搜索。
最后,覺的有幫助的話可以關注公眾號 AI知識物語, B站 出門吃三碗飯,不定期更新視頻講解。
好了,我去復習明天下午的操作系統(tǒng)考試了,我真的會謝!