有哪些有趣的圖形學(CG)和計算機視覺(CV)相結合的應用的例子?


KinectFusion,用CV的方法做tracking,用CG的方法做重建和渲染


圖形學和視覺之間的聯繫那可是相當的緊密。

計算機視覺里很多演算法都涉及到光照模型的估計。

比如background modeling,一般的做法是對某個像素進行GMM建模,但是在光照變化比較厲害的時候GMM就不合適了,多個學者嘗試估算一個全局或者光照模型來客服劇烈光照變化帶來的問題,光照模型的估計有不少是從CG領域借鑒來的。

比如dense-based matching,這是一個很普遍的視覺問題。比如template matching,比如dense based direct optimization等等,簡化來說就是直接從兩個image裡面計算距離,有時候是直接計算L(n)-Norm,有時候是NCC等,方式很多。但存在的一個通病就是如果兩者存在比較大的光照變化,會直接影響後面的結果。當然這裡有很多方法來做光照的normalization,這裡就需要對全局活著局部光照模型進行估計,不同的應用場景方法不一樣,比如用到planar object上的方法跟用在face上的方法就很不一樣,有時候需要考慮物體的材質,顏色和光源的位置等等。這些方法裡面很多都是借鑒自圖形學領域。

對於一些視覺演算法的開發和驗證來說,通過渲染來獲得大量的數據和測試樣本是非常重要的。

比如CAD-based object detection, 通常需要我們提前render很多不同視角下的數據,然後在模板數據上提取需要的特徵用在實際的檢測中。

在ICP這樣的迭代優化模型裡面,如果我們有一個足夠快的3D renderer,我們可以在線進行優化,可以得到更加精確的結果。因為迭代的梯度值可能只是SE(3)空間里的一個大小不確定的增量,而離線生成的模型只是sphere上的一個非常稀疏採樣。

再比如,使用卷積網路訓練一個飯碗的檢測器,你可以通過渲染來生成大量的數據。比如你用卷積網路來做OCR,你可以通過渲染少數的數據樣本獲得大量的數據來用於訓練或者最終檢測器的驗證。

等等。

另外通過圖形學的手段來visualize視覺演算法里的一些過程和狀態也是一個極其直觀和高效的調試手段。

竊以為(粗糙地以為),視覺是通過感測器數據認識世界的手段,圖形學則是模擬真實世界的手段,他倆今後會你是風兒我是沙……聯繫愈加緊密,學習圖形學(2D和3D)知識很有必要。


CV 領域的 deep learning 的一大難題 —— 缺少標記過的數據,那麼我們就用 graphics 來生成假的數據(逃

常見的有基於 GTA 或三維遊戲引擎的數據生成,可用於車輛識別、行人檢測、光流估計。

  • cvpr2016 - The SYNTHIA Dataset: A Large Collection of Synthetic Images for Semantic Segmentation of Urban Scenes SYNTHIA Dataset
  • FlowNet: Learning Optical Flow with ConvolutionalNetworks
  • Virtual KITTI database : Proxy Virtual Worlds Virtual KITTI


kinectfusion後續的一個很重要的成果是slam++,特點是把slam用的那些輸入參數從所謂的「點雲」,無論是稀疏的點還是稠密的點還是最近比較火的edge,全部上升一個層面,以object和object的pose作為slam的graph的節點,思路很新穎。計算機圖形學的應用就是在後面的渲染,以及中間物體辨識部分。總之,這個演算法能把這些現實環境中的3D的事物折射到一個虛擬的環境中,並且不使用抽象的那些點雲或者edge之類的來表示,而是用個一般人更能接受的、更直觀的物體的「模型」去表示。這個就比什麼ORB-SLAM之類的高到不知道哪裡去了,雖然這兩個演算法目的並不相同。

大致思路是感測器用kinect,pose estimation用一個icp的dense slam,反正用icp的slam不要太多,比較成熟了,而且在室內環境用的話kinect的深度圖也比較準確,做起來比較容易。物體的識別用了一個德國人的演算法,並行化的從點雲裡面去估計三維物體的mesh,然後把mesh和演算法裡面預製的model的mesh去匹配,匹配的方法反正是找特徵然後和庫里匹配然後再vote,中間用GPU加速,論文裡面還寫了一個編程上的trick。本質上仍然是個多視幾何的思路,沒有用傳統的機器學習思路。

缺點當然也有,一個是要預製室內物體的model,所以他們的演示視頻很多都是在一個報告廳或者辦公室放幾十把椅子,然後測試椅子的模型。還有一個缺陷是因為感測器用的是kinect,所以室外用基本上廢了。不過反正是用一個深度圖,買一個比較貴的深度很準確的雙目(自己帶處理器直接計算實時深度圖的那種雙目,價格會很高)估計也是可以的,只不過沒見人做過。

這個方案用在AR裡面,效果非常不錯。他們是開源的,而且在youtube上有視頻。自己搜搜吧。

Renato F. Salas-Moreno

有句講句,這個組做的東西我最佩服的不是slam++,而是ElasticFusion,這個東西是真的思路很劍走偏鋒。


利用通用圖像降噪方法來減少(蒙特卡羅)渲染里的雜訊...

Removing the Noise in Monte Carlo Rendering with General Image Denoising Algorithms


渲染各種場景樣本用於機器學習,深度學習之類的。

模擬測試無人駕駛可靠性等

還有就是3D重建了。


Multi-View Stereo 和進階版的 Structure from Motion。可能CG方面的技術比較少。

通過多角度拍攝一個物體來得到深度信息,每兩個相機能得到一副深度圖。

多個相機能知道多個深度信息

知道每個相機的坐標之後就能還原出物體的3D模型。

這個技術可以用得蠻多的。比如說建築物模型的還原

圖比較模糊,上面那些黑點是camera在的位置,下面那些淡淡的是用那些camera拍的圖片還原出來的一部分。可以看出相機看不到的地方還是缺失的。

這張就比較清楚了。黑色的就是相機拍照的地方。大致可以看出一個城市的樣子

這啥建築。。叫不出名字

有些網站也做了從網友們拍的照片來還原一些著名景點之類的事情

這個貌似是成果?幾個月前看的忘記了。。知乎也不能上傳動圖。。。一些3D街景有時候也會用到這技術。有些可能用的是全景照片生成的技術,跟這裡說的MVS和SFM不太一樣。


各種3d reconstruction都算吧,不管的environment reconstruction(比如slam),還是image based modeling。


visual SLAM


增強現實


Augmented Reality


視覺演算法中涉及到評估演算法精度的,將演算法跑在虛擬三維場景里是最適合不過的,

在三維環境中將渲染出來的攝像機畫面作為演算法輸入,同時將演算法結果與三維場景里得到的groundtruth數據比對,這比在現實中基於其他測量方式的比對方便、準確得多。

比如上面兄弟提到的光流,還有雙目,這方面演算法的測試、評估我們項目中就是這麼做的!


snapchat,MSQRD之類的基於人臉的tracking,然後根據特徵點進行一些cg的渲染,比如給你帶個頭盔啥的


推薦閱讀:

計算機視覺中,目前有哪些成熟的匹配定位演算法?
人工智慧未來會最先在哪個領域實現應用?
如何通過人工神經網路實現圖像識別?
單目SLAM在移動端應用的實現難點有哪些?
到日本東大讀修士,然後再申請到美國top10的PHD可行么?

TAG:計算機 | 計算機視覺 | 計算機圖形學 |