對(duì)于新手來(lái)說(shuō),使用格雷碼做單目結(jié)構(gòu)光三維重建是一個(gè)入門(mén)級(jí)的訓(xùn)練。但是在復(fù)現(xiàn)時(shí)往往會(huì)遇到一個(gè)問(wèn)題,明明解碼都很不錯(cuò)了,重建后的點(diǎn)云精度卻很低,甚至重建出來(lái)的平面點(diǎn)云出現(xiàn)斷層現(xiàn)象。這是由于格雷碼是一種離散型編碼,編碼精度是整數(shù)級(jí)的像素,這種編碼設(shè)計(jì)注定了它的精度不會(huì)太高。所以在實(shí)際應(yīng)用中,格雷碼通常是配合著其他編碼方式一起使用:比如使用格雷碼來(lái)標(biāo)示相移的周期數(shù)。
盡管如此,由于格雷碼本身的特性,穩(wěn)定性高,抗反光效果比較好,在精度需求不是特別高的情況下,還是有適用場(chǎng)景的。尤其是景深范圍大的時(shí)候,相位很容易出現(xiàn)模糊,可是對(duì)于黑白條紋的格雷碼適應(yīng)的景深就能夠大一些。本文就簡(jiǎn)單介紹下如何使用純格雷碼進(jìn)行三維重建,并得到一個(gè)精度尚可的點(diǎn)云(至少不出現(xiàn)重建平面時(shí)明顯斷層/分層現(xiàn)象)。
從解決問(wèn)題的本身出發(fā),想要得到一個(gè)精度比較不錯(cuò)的點(diǎn)云,最直觀的思路是解碼時(shí)得到一個(gè)準(zhǔn)確的亞像素級(jí)精度,比如像相移那樣,但是對(duì)于格雷碼而言,很難去給出一個(gè)很好的插值函數(shù)去獲得一個(gè)亞像素級(jí)的匹配,實(shí)際上,如果以圖片某一行為例,你得到的解碼結(jié)果可能是 16,16,17,17,18,18,18,NaN,NaN,21… 對(duì)于這樣排列的解碼結(jié)果,想要用一個(gè)函數(shù)去定義亞像素的插值函數(shù)是一件很困難的事情,筆者暫時(shí)沒(méi)有看到哪篇文章提供了好的思路。(如果有讀者知道,歡迎和筆者溝通)。

在無(wú)法獲得準(zhǔn)確的亞像素級(jí)的解碼精度后,我們可以從三維重建方式本身去考慮,如上圖所示。圖中是一幅經(jīng)典的雙目重建模型,在之前的系列篇中我們介紹了單目結(jié)構(gòu)光重建可以使用雙目模型,只需要把投影儀看成一個(gè)逆相機(jī)就可以。圖中紅線(xiàn)即極線(xiàn),也就是說(shuō),理論上相機(jī)成像點(diǎn)PL(圖中l(wèi)eft camera) 對(duì)應(yīng)的可能的投影儀(圖中Right Camra)中的位置是圖中紅線(xiàn),如果知道對(duì)應(yīng)的是圖中紅線(xiàn)哪一點(diǎn),就可以解得準(zhǔn)確的三維位置。
實(shí)際上,由于我們能夠解得的編碼只能是整數(shù)級(jí)的,導(dǎo)致我們的解碼結(jié)果會(huì)像如下圖所示的函數(shù)圖一樣,橙色的線(xiàn)是理論的極線(xiàn),但是由于解碼的離散性,我們得到的解碼坐標(biāo)是個(gè)整數(shù)級(jí)的數(shù),如圖中的階躍函數(shù),于是誤差就這么產(chǎn)生了。

我們解得的點(diǎn),通常會(huì)對(duì)應(yīng)極線(xiàn)的或上方一點(diǎn)或下方一點(diǎn),導(dǎo)致該點(diǎn)與投影儀中心點(diǎn)連線(xiàn)與相機(jī)像點(diǎn)和相機(jī)中心點(diǎn)發(fā)出的射線(xiàn)在三維空間不相交。如果相交,交點(diǎn)就是物體的在空間中的實(shí)際三維位置。盡管由于解碼的離散性導(dǎo)致兩條直線(xiàn)不相交,但是兩條這空間直線(xiàn)間的距離不會(huì)很遠(yuǎn),所以可以用如下思路去估計(jì)實(shí)際的物體三維位置:
求這兩條空間直線(xiàn)中距離最近的兩個(gè)點(diǎn),而這兩個(gè)點(diǎn)的中點(diǎn)就是我們估計(jì)的物體三維位置點(diǎn)。
這兩個(gè)點(diǎn)怎么求呢?
在數(shù)學(xué)上很簡(jiǎn)單,我們高中都學(xué)過(guò)如何求三維空間中兩條直線(xiàn)的距離,那條和兩條直線(xiàn)都垂直且相交的線(xiàn)與兩條直線(xiàn)的交點(diǎn)就是我們要求得的兩條直線(xiàn)在空間中距離最近的兩個(gè)點(diǎn)了!
至此,我們就很好的估計(jì)了一個(gè)比直接用解碼結(jié)果按公式求得的更準(zhǔn)確的三維重建點(diǎn)了,但是細(xì)心的朋友一定發(fā)現(xiàn)了,在一般形式的結(jié)構(gòu)光三維重建中,我們僅僅需要用到列方向的條紋,(為什么僅需要一個(gè)列方向,可以看系列篇之三維重建原理),但是在上述求射線(xiàn)的過(guò)程中,我們需要知道像點(diǎn)對(duì)應(yīng)的投影儀位置的行和列兩個(gè)信息,如果僅有一個(gè)列方向的值,列所在的直線(xiàn)和原點(diǎn)就構(gòu)成一個(gè)面了!那像點(diǎn)和相機(jī)中心連線(xiàn)的射線(xiàn)一定會(huì)和這個(gè)面有交點(diǎn),且這個(gè)交點(diǎn)即是我們用傳統(tǒng)的解法得到的解,這個(gè)解通常由于列值(格雷碼)解碼值精度不夠而不夠精確。
純格雷碼的三維重建并不算很常見(jiàn),如果一定要用,不防試下上述方法,可以保證一定精度,當(dāng)然還是沒(méi)有相移法來(lái)的準(zhǔn)確。還有一個(gè)顯然的缺點(diǎn)就是投影的圖片較多,需要行列方向都投影格雷碼,投影圖片數(shù)量太多會(huì)損失時(shí)間的效率,但是作為一個(gè)新手入門(mén)demo,還是很不錯(cuò)的選擇!
審核編輯:劉清
-
格雷碼
+關(guān)注
關(guān)注
2文章
34瀏覽量
13516
原文標(biāo)題:三維重建之純格雷碼三維重建
文章出處:【微信號(hào):3D視覺(jué)工坊,微信公眾號(hào):3D視覺(jué)工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
使用DLP LightCrafter4500投影結(jié)構(gòu)光進(jìn)行三維重建遇到的疑問(wèn)求解
怎樣去設(shè)計(jì)一種基于RGB-D相機(jī)的三維重建無(wú)序抓取系統(tǒng)?
如何去開(kāi)發(fā)一款基于RGB-D相機(jī)與機(jī)械臂的三維重建無(wú)序抓取系統(tǒng)
無(wú)人機(jī)三維建模的信息
MC三維重建算法的二義性消除研究
基于FPGA的醫(yī)學(xué)圖像三維重建系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
透明物體的三維重建研究綜述
NVIDIA Omniverse平臺(tái)助力三維重建服務(wù)協(xié)同發(fā)展
結(jié)構(gòu)光三維重建:相移法的基本原理及應(yīng)用優(yōu)勢(shì)
如何對(duì)結(jié)構(gòu)光用格雷碼編碼 如何對(duì)編碼的結(jié)構(gòu)光進(jìn)行解碼
深度學(xué)習(xí)背景下的圖像三維重建技術(shù)進(jìn)展綜述
三維重建:從入門(mén)到入土
如何實(shí)現(xiàn)整個(gè)三維重建過(guò)程
基于光學(xué)成像的物體三維重建技術(shù)研究
如何使用純格雷碼進(jìn)行三維重建?
評(píng)論