谷歌街景能夠計(jì)算3D城市點(diǎn)云模型,那么怎么才能夠做到?可以來這里了解一下。
計(jì)算深度地圖
現(xiàn)在我們有了全景圖片,接下來需要做的是提取對應(yīng)的深度地圖。
獲得一個深度圖像的JSON代碼(representation)、其中包含了全景圖片中每個像素從相機(jī)到最近表面的距離信息。
通過Base64處理這些數(shù)據(jù),并將其轉(zhuǎn)化成無符號8位整數(shù)的陣列( array of unsigned 8-bit integers)后,我們就能獲得標(biāo)題信息(Header Information)并獲得有用的數(shù)據(jù),例如參考平面數(shù)字(number of referenced planes)。
事實(shí)上,在512×256網(wǎng)絡(luò)上的每一個像素都對應(yīng)了眾多平面(Planes)中的一個,通過Normal Vector和其到攝像機(jī)的距離而定。
所以,要想計(jì)算出一個像素的深度,我們必須決定從攝影機(jī)中心發(fā)出的光線和相對對應(yīng)平面的交叉點(diǎn)。
將其重復(fù)到所有平面,我們能夠?qū)⑸疃鹊貓D制成512×256元素的32位浮動陣列(32-bit float array of 512×256 elements),這個要比我們的RGB全景圖片分辨率低多了。
至于計(jì)算,對于每個點(diǎn)我們考慮它相關(guān)的平面,將其距離計(jì)算如下:
算法1:深度地圖計(jì)算
公式中的“indeces”包含了每個像素相關(guān)平面的陣列,為了能獲得一個代表單平面w∗ h vector的更簡便的圖片,例如,我們可以創(chuàng)造colored canvas,其中寬度為w、高度為h,而每個像素可以被定義為:
算法2:深度地圖可視化
這時候會的出一個下圖類似的圖片