計(jì)算機(jī)視覺方向簡介 | 單目微運(yùn)動(dòng)生成深度圖
點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
有什么用?
深度圖在計(jì)算機(jī)視覺中有非常廣泛的應(yīng)用,比如前背景分割(用于背景虛化、美顏、重對(duì)焦等)、三維重建(用于機(jī)器人導(dǎo)航、3D打印、視效娛樂等)。目前能夠直接快速獲得深度圖的方法就是使用深度相機(jī),不同深度相機(jī)獲取深度圖原理見:《深度相機(jī)原理揭秘--飛行時(shí)間(TOF)》、《深度相機(jī)原理揭秘--雙目立體視覺》、《深度相機(jī)原理揭秘--結(jié)構(gòu)光(iPhone X 齊劉海原理)》。
但是很多時(shí)候由于硬件的限制,我們不能通過深度相機(jī)獲得深度圖。只能利用單目相機(jī)通過相關(guān)算法來間接計(jì)算深度圖。比較有名的方法就是運(yùn)動(dòng)恢復(fù)結(jié)構(gòu)(Structure from Motion),也就是說,我們需要移動(dòng)(通常需要較大的移動(dòng))單目相機(jī)從而獲得不同視角的多張圖片才能間接得到深度圖。
從微小運(yùn)動(dòng)中獲取深度圖(depth from small motion)是其中一個(gè)比較巧妙的、用單目相機(jī)間接獲得深度圖的方法。該方法利用非常微小的運(yùn)動(dòng)來計(jì)算深度圖,這個(gè)“非常微小的運(yùn)動(dòng)”的目的是在用戶察覺不到的時(shí)間(比如手機(jī)用戶尋找最佳拍攝位置時(shí)的微小移動(dòng),或者用戶拿著相機(jī)按快門前的預(yù)覽時(shí)間,或者類似live photo等)內(nèi)得到深度圖。如果該方法可以獲得較高質(zhì)量的深度圖,就可以一定程度(靜態(tài)場景下)上替代基于RGB雙目立體視覺的深度相機(jī)(如手機(jī)雙攝,手機(jī)雙攝介紹見《為什么會(huì)出現(xiàn)雙攝像頭手機(jī)?》系列文章)的功能。
下面來介紹該技術(shù)的一個(gè)應(yīng)用。如下圖所示,(a) 是輸入的一個(gè)微運(yùn)動(dòng)視頻中所有幀的平均疊加圖,可以看到運(yùn)動(dòng)真的是非常微小的。(c) 是算法計(jì)算的深度圖,從放大的細(xì)節(jié)來看,邊緣還是很銳利的,(d) 是利用得到的深度圖進(jìn)行重對(duì)焦的效果。我們看到對(duì)焦主體比較清晰,而位于主體前后景深的物體都已經(jīng)虛化。
什么原理?
本文的亮點(diǎn)之一就是可以對(duì)未標(biāo)定的相機(jī)進(jìn)行深度圖和內(nèi)外參數(shù)同時(shí)估計(jì)。大致流程如下:
1、以第1幀作為參考幀,檢測當(dāng)前幀和參考幀的Harris角點(diǎn),用KLT法進(jìn)行特征點(diǎn)匹配。
2、先假設(shè)初始的相機(jī)內(nèi)參和畸變參數(shù),利用光束平差法最小化重投影誤差,迭代得到相機(jī)的內(nèi)外參數(shù)、特征點(diǎn)對(duì)應(yīng)的三維空間點(diǎn)。其原理示意圖如下所示。Uij是第i張圖像相對(duì)于圖像中心的第j個(gè)特征點(diǎn)的畸變坐標(biāo),紅色點(diǎn)是其去畸變后的坐標(biāo)。藍(lán)色點(diǎn)是重投影的坐標(biāo)。目標(biāo)就是最小化第i幀中紅色點(diǎn)和藍(lán)色點(diǎn)的位置誤差。
3、根據(jù)得到的內(nèi)外參數(shù)用平面掃描法進(jìn)行稠密立體匹配,并采用贏家通吃的策略得到粗糙的深度圖。微小運(yùn)動(dòng)有如下優(yōu)勢(shì):由于時(shí)間短,移動(dòng)小,視場角變化小,可以近似認(rèn)為所有幀在該時(shí)間段內(nèi)的灰度值保持不變。這個(gè)假設(shè)對(duì)于可靠的稠密像素匹配很重要。
4、將彩色圖作為引導(dǎo)圖,對(duì)深度圖進(jìn)行精細(xì)化。獲得深度圖的過程如下:
(a) 用贏家通吃的策略得到一個(gè)粗糙的深度圖;(b) 去除不可靠的深度值;(c) 深度圖精細(xì)化后的結(jié)果;(d) 參考圖像。
該算法的偽代碼流程圖如下所示:
效果怎么樣?
該算法測試效果如下圖所示。下圖左側(cè)是用iPhone 6拍攝的1s時(shí)間的微小運(yùn)動(dòng)連續(xù)圖像的平均圖,從中可以看出運(yùn)動(dòng)非常小。右側(cè)是算法輸出的對(duì)應(yīng)深度圖。
該算法和其他算法在重對(duì)焦效果上的對(duì)比如下圖所示。可以看到該算法能夠在背景虛化的同時(shí)保持相對(duì)銳利的邊緣。
盡管該算法設(shè)計(jì)的初衷就是用于微小運(yùn)動(dòng)的情況,但是如果運(yùn)動(dòng)特別微小,估計(jì)的相機(jī)位姿就會(huì)非常不穩(wěn)定。另外如果圖像邊緣缺乏有效的特征點(diǎn),會(huì)導(dǎo)致徑向畸變參數(shù)的估計(jì)變的不準(zhǔn)確。上述情況會(huì)導(dǎo)致深度圖出現(xiàn)較大的誤差。
該算法只適合于靜態(tài)場景,如果有快速移動(dòng)物體,該算法會(huì)失敗。另外要注意的是,該算法估計(jì)的深度圖是相對(duì)深度。
運(yùn)行時(shí)間:
該算法是在個(gè)人臺(tái)式機(jī)上進(jìn)行測試。電腦配置:Intel i7-4970K 4.0Ghz CPU,16GB RAM。對(duì)于一個(gè)分辨率為1280x720的30幀的微小運(yùn)動(dòng)視頻,該算法(未優(yōu)化)完成特征提取、跟蹤、光束平差需要1分鐘。稠密立體匹配階段耗時(shí)10分鐘。
有什么參考資料?
本文算法對(duì)應(yīng)的文章:
Ha H, Im S, Park J, et al. High-Quality Depth from Uncalibrated Small Motion Clip[C]// Computer Vision and Pattern Recognition. IEEE, 2016:5413-5421.
源碼:
https://github.com/hyowonha/DfUSMC
上述論文的優(yōu)化及加速版:
Monocular Depth from Small Motion Video Accelerated,2017 International Conference on 3D Vision
好消息!
小白學(xué)視覺知識(shí)星球
開始面向外開放啦??????
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程 在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。 下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講 在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。 下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講 在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。 交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~







