能通過一張照片(2D)得到3D的模型嗎?

很好奇其實如果將人眼所看到的畫面保存下來(拍照),人類是可以感知照片內的各個物體。是不是可以理解成這是一種2D到3D認知的轉換?


可以的,單張照片重建模型,人可以做到的,計算機理論上也可以。你之所以能夠推斷出來,是因為你有先驗知識,也就是所謂的見的多了。學術界目前有很多這方面的工作。當然了,因為單張照片畢竟存在信息上的缺失,所以很難還原出完整的 3D 模型。不過對於特定的物體(比如人臉),結合一些先驗知識還是可以做到的。例如:

[1] Chai, Menglei, et al. "High-quality hair modeling from a single portrait photo." ACM Transactions on Graphics (TOG) 34.6 (2015): 204.

這一篇的關注點是從單張圖片中如何高質量的還原出頭髮的模型。不過整體是基於以前還原頭像的工作來做的。可以看到基本上是類似於浮雕的效果,頭髮的還原度非常高。當然鼻子的高度之類的東西可能就很難還原了。

還有一些老文,比如99年的這篇基於可變性模型做的想過也是非常的驚艷。大致思路是給人臉建立一個參數化的模型,通過調節這個參數化的模型去擬合輸入圖像。

[2]Blanz, Volker, and Thomas Vetter. "A morphable model for the synthesis of 3D faces." Proceedings of the 26th annual conference on Computer graphics and interactive techniques. ACM Press/Addison-Wesley Publishing Co., 1999.

對於任意的物體,這篇工作提出了一種方法,不過要求提供和被重建物體同一類的三維模型來提供先驗知識

[3] Li, Dongping, et al. "Shape Completion from a Single RGBD Image." (2016).

不需要先驗知識的也有,不過生成的就不是模型,而是點雲了。比如這篇文章的工作,可以通過手機攝像頭拍攝視頻來獲取3D 信息。可以看到有很多缺失的部分,一方面因為單目相機很難記錄完整的3D 信息,另一方面因為有些部位由於遮擋拍不到。

[4] Tanskanen, Petri, et al. "Live metric 3d reconstruction on mobile phones." Proceedings of the IEEE International Conference on Computer Vision. 2013.其他的還有很多我就不一一例舉了。


題主的問題在計算機視覺領域裡還是很前沿的。但是由於對3D模型這塊描述的並不精確,其實可以理解為兩種意思,但是無論哪種都是很值得深入探索的方向。

第一種。3D Scene Reconstruction / 三維場景重建

在這個領域裡,最早的工作可能要在10-20年前就已經出現了。那個時候的 vision 是 pre-deep learning 時代,所以大家都是提出數學方法,相對來說比較五花八門。通常來說,single image 3D scene reconstruction 就是通過單張圖片來重新估測他的深度信息,以此來得到他的結構。因此在這裡沒有任何填補其他未知信息的成分,跟我們普通所認為的三維重建稍稍有些不一樣。(vision領域裡會認為這是2.5D)

比較著名的作品有 Andrew Ng 的幾個作品(cornell.edu 的頁面, umich.edu 的頁面)核心思想都是通過 orientation, co-planar, co-linearity 類似點線面結構關係來構造 grid-structure Markov Random Field (MRF) 來計算每個像素處在哪個平面。

第二種。3D Object Reconstruction / 三維物體重建

在這裡的絕大部分工作相對比較新。因為學習一個物體完整的架構是需要大數據支撐的,因此基本上所有類似的工作都是有深度學習的框架在。由於傳統3D模型 (3D CAD Model)是由 vertices 和 triangulation mesh 組成的。因此不一樣的數據大小就造成了training的一些困難。後續,大家都用 voxelization 的方法把所有CAD model轉成binary voxel (1是填補的0是空缺的)這樣保證了每個模型都是equal size。

最早比較著名的工作是 3DShapeNet (princeton.edu 的頁面) 作者利用 Deep Belief Network (DBN)來學習 voxel 的 probabilistic embedding 然後在給帶有2.5D信息的圖片後,通過 Gibbs Sampling來不斷預測他的 shape class 和填補他的未知 voxel 來完成模型重建。這項工作也同時提出了比較著名的ModelNet數據集。

後續有 CMU最近的作品 TL Network(arxiv.org 的頁面) 利用 auto-encoder 學習3D Model 的 embedding 然後通過 ConvNets 學習一個 deterministic function 讓其 rendered image infer 到學習到的 embedding 上。因為 auto-encoder 是 generative 的, 對於新的 test image,模型就會infer 到相關的 3D model 的 embedding,再通過decoder 生成 其相應的 3D model。

最近剛出結果的 NIPS 2016, 吳家俊也做出了類似的工作 (jiajunwu.com 的頁面),其中把 auto-encoder 換成 generative 能力更強的 GAN 然後把 ConvNet 換成了 VAE。其中由於 voxel 是三維的,他的 resolution 就成了指數增長,在上述介紹的工作中一般都使用 小於等於 32^3 voxel 來防止過多佔用內存。因此以下還有幾個問題值得我們繼續深入研究:

  • 如何將voxel 的解析度進一步提高。
  • 如何利用較小的數據而保持相對不差的重建結果。
  • 能否用先前學習到對三維模型的解讀使得架構可以重建從來沒有訓練過的數據類別。


有的答主提到一張照片可以建模,其實是通過分析光影建的一個"假3D"。

道理等同人眼,閉一隻眼睛理論上看不出深度(物體前後順序)。然而人可以根據生活經驗,可以根據光影猜出深度,並不準確。計算機同理,通過演算法對比高光和陰影也可以猜個一二。

硬廣一個,我們是咋拍3D的

這些個角度拍3D比較夠了。

很常見的應用例如各種法線貼圖生成工具(xnormal),一張照片生成個置換或法線貼圖,鬧呢。

另外研究國外(包括迪士尼)的論文要謹慎,有的是完美的實驗室環境,你懂的。例如石頭表面質地亞光是最理想的3d掃描材質,如果本身顏色均勻靠分析深淺也有可能建出個低模來。有的一百個案例里挑出兩個最好的結果,憋問我是咋知道的...

---------------------------------

那麼問題來了,為啥我們肉眼看一張照片能看出深度呢?不管一隻還是兩隻眼。

因為照片里的光線信息已經被「烘焙」進去了,如之前所述,大腦通過分析光源陰影判斷出深度。

就像長者一樣見多識廣,什麼大風大浪沒見過。

在一個完美的均勻光源下,四隻眼也看不出深度。舉個栗子,下面是我們矩陣三維掃描出來的。

如果嚇到你了我很抱歉,我想拿這張圖嚇人已經很久了。

你看臉頰部分顯得很平,可以明顯看出深度的僅限鼻翼和耳朵附近,這部分把光打勻幾乎不可能。

做CG特效需要這種漫反射貼圖,光影是渲染器分析幾何圖形結合貼圖合成一起才看出立體效果。

---------------------------------

不過人眼人腦是個很好玩的東西,我有個朋友有種怪病,啥都能看得出來,就是認不出來人臉。他判斷人名不看臉,靠聽聲音加觀察舉止習慣,這個素材庫有點大。

想想跟女朋友說:我愛的是你的內涵,literally。

有位答主舉的例子:

這個顯然不是一張照片建模,絕對是多張,具體多少張看不出來,如果有單色點雲我還能猜猜。為啥呢,你看照片並沒有拍到右臉頰。


當然可以,不過用來發論文太浪費了,妥妥的商業化去


人是因為經過了大量的訓練,才能得到2D-&>3D的關係。然而即便如此,這個關係也並非唯一,所以一定會有誤判。更何況,人類是得不到3D模型的,比如背面的信息就沒有。

機器也一樣,如果有大量訓練,也能做到這樣的結果。目前人臉和人體這樣研究比較透數據比較多的領域,是可以單張照片得到一個粗略的模型。但因為信息缺失,仍然不可能精確。

再者,人眼並不是一張照片,而是兩張。人也因為大量的訓練,可以直接從兩張照片建立出大致的深度信息。


別說3D了,可以得到實物。


如高票所示,早期的computer vision工作大多基於圖像的feature/pattern, deep learning的迅速發展改變了這一切。本問題的發展也類似,速遞一個前幾天看到的叉院和Stanford的工作,利用CNN對單張圖片進行3D重建

[1612.00603] A Point Set Generation Network for 3D Object Reconstruction from a Single Image

作者首次利用deep learning對輸入圖像生成其點云:

再利用另一個6層的CNN將point set處理成連續的3D結構

與人類相比在部分數據集上有優勢:

point cloud相對簡單,沒有連接性問題,方便training

作者基於TensorFlow設計實現了一個多層CNN,探討了數種distance metric, 設計和選擇了cost function and loss function, 並探討了該方法的其他功能,如從RGB-depth 圖像從補全缺失的3D結構(下圖),及出錯的情形。人工合成的dataset有220k張圖片來自2000種物品。

類似工作:

https://arxiv.org/abs/1604.00449PS:ls貌似竟然出現了這篇文章投CVPR2017的reviewer,真是藏龍卧虎啊···仰慕


「腦補」跟「還原」是兩回事。


鴿子為什麼這麼大?


單憑一張2D照片是絕對不可能還原出精準的3D模型的,3D是比2D更高的維度。

再先進的技術也只能憑經驗猜想,自以為得出了應該接近的3D模型。

至於猜想有多靠譜

你見過的「背多分」美女多嗎?


舉個例子,上面這幅圖如果不給定光源位置,至少有2種復原方式。所以2d升3d要麼靠先驗知識,要麼靠多張照片。


當然了不是我的作品


如果我沒記錯的話,Illusion的Play Club也是使用的圖片作為存檔。考慮到這種遊戲往往要存放骨骼和動作信息,可能不像 @Hengruo 老爺所說的ARGB值低位存放數據,更可能的是使用所謂圖種的原理——簡單的說就是把圖片與RAR文件用二進位的方式合併起來。圖片的讀取只需要讀取前半部分的數據即可以正常顯示,rar壓縮文件只需要讀取後半部分的數據即可以正常讀取。

採用這種機制的好處是實現了存檔和預覽的統一,不會再有哪個捏了個奇醜無比卻套上一個性感的預覽圖出來禍害別人狀況發生了。福利界也是要謹守守序善良的呀。

===============================================

有沒有老司機分享一下HoneySelect的資源啊,手持Vive很急


3-Sweep: Extracting Editable Objects from a Single Photo, SIGGRAPH ASIA 2013

視頻封面3-Sweep: Extracting Editable Objects from a Single Photo—在線播放—優酷網,視頻高清在線觀看視頻


可以的,實驗室正在做這些,有保密要求不能細講,但的確可以。


前段時間同事發來一份投資建議書,裡面的目標公司就是一家專門做「三維重建」的公司,簡單點說,感覺和題主描述的「通過照片得到3D模型」還是蠻符合的。

他們的系統是通過在無人機內設置一套拍攝的程序,自動配置最佳的飛行路徑和拍攝角度,並進行自動拍照。

以下是做項目調研的時候採集的一些信息:

對目標物體深度信息的獲取方法分類:

主動式三維重建技術:利用具有檢測深度功能的精密儀器,如激光、聲波、電磁波等光源或能量源發射至目標物體,通過接收返回的光波來獲取物體的深度信息。

被動式三維重建技術:基於圖像的三維重建技術,僅利用拍攝裝置獲取的圖像或者圖像序列,通過特定演算法計算得到物體的立體空間信息。

被動式(基於圖像的)三維重建技術介紹

被動式一般利用周圍環境如自然光的反射,使用相機獲取圖像,然後通過特定演算法計算得到物體的立體空間信息。主要有以下三種方法:

?紋理恢復形狀法

根據物體表面紋理元可以確定表面方向,從而恢復出相應的三維表面。該種方法對物體表面紋理信息的要求嚴苛,應用範圍較窄,只適合紋理特性確定等某些特殊情形。

?陰影恢復形狀法

利用不同光照條件下的圖像的明暗程度與陰影來計算物體表面的深度信息,並以反射光照模型進行三維重建。需要準確的光源參數,包括位置與方向信息。無法應用於諸如露天場景等具有複雜光線的情形中。

?立體視覺法(該公司所採用的方法)

通過一幅圖像推測三維信息和利用不同視點上的兩幅或多幅圖像恢復三維信息等三種方式。通過模擬人類視覺系統,基於視差原理獲取圖像對應點之間的位置偏差,恢復出三維信息。雙目立體視覺重建,在實際應用情況優於其他基於視覺的三維重建方法,也逐漸出現在一部分商業化產品上,限制條件少,應用範圍廣。

被動式三維重建技術國內科研現狀

目前國內從事基於圖像的三維重建領域科研機構較少,且大部分還以學術研究為主,其中,北大、中科院、浙大、北交大、上交大、等科研院所及高校都有相關技術方向的研究,但是研究側重點各不一樣,在技術的市場化方面幾乎都沒有建樹。

部分研究成果:

1.北京交通大學的袁保宗提出了,由真實世界到計算機虛擬世界的轉換問題;

2.浙江大學的劉剛設計了,一個能繪製出幾何模型和表面紋理的真實場景交互建模系統;

3.中科院自動化研究所,開發的CVSuite,能利用立體視覺進行三維重建;

4.上海交大馬利庄提出了一種基於構建Visual Hull,求取物體形狀及表面反射屬性的方法。


算。可以理解為雙目RGB相機拍攝一幀,並通過超強的神經網路重建三維場景。

不過沒有被看到的地方終究是信息缺失的,腦補不一定能得到正確的結果。

比如那些廣為流傳的視覺欺騙,讓你把曲線看作直線,平面看作立體物體等。

如果是人在空間中四處走動,觀察各個方向上的畫面,結果會更精確。

不過等等,這不是SLAM嘛?


授機器以魚,或授之以漁。要麼告訴他直接做,要麼自己學怎麼做。


攝影測量有話要說


這不就是現在的雙目圖像三圍重建么。。。目前學術上已經有不錯的結果了,只是視差這塊一直解決的不好


推薦閱讀:

單目視覺里程計演算法深度信息的提取?雙目的原理和單目的不同?
不用結構光,現在的雙目立體視覺有成熟的產品嗎?
為什麼很少人用FFT加速CNN卷積層的運算?
如何評價coco2017的結果和此類比賽的前景?
在曠視科技工作是怎樣一種體驗?

TAG:計算機視覺 | 成像原理 | 立體視覺 |