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