這個教程將帶你使用自己的手機攝像頭和圖片實現(xiàn)從零開始到點云。
這是一個由3部分組成的系列文章。 我注意到,其他大多數(shù)關于三維重建的教程都在某種程度上有點欠缺。別誤會,我認為它們是十分優(yōu)秀的成果,但是在某種程度上它們是支離破碎的,或者它們當中有一部分過于深入地研究理論,或者兩者兼而有之。 更糟糕的是,他們使用專門的數(shù)據(jù)集(如Tsukuba),這就會造成對一些數(shù)據(jù)集之外的任何東西在使用這種算法時,因為參數(shù)調微調會產生一些麻煩。 我相信三維重建(廣義的計算機視覺)最酷的事情是重建你周圍的世界,而不是別人的世界(比如數(shù)據(jù)集中的世界)。本教程是一個初步的嘗試,旨在幫助您使用OpenCV的強大功能重新創(chuàng)建自己的世界。 簡單地說,這個教程將帶你使用自己的手機攝像頭和圖片實現(xiàn)從零開始到點云。所以,廢話不多說,讓我們開始吧。 注意 為了避免寫一篇非常長的文章,本教程分為三個部分。 第1部分(理論和需求):概述了一個非常簡單的立體三維重建所需要的步驟。 第2部分(相機校正):包括用代碼校正你相機的基礎設置/知識。 第3部分(視差圖和點云):介紹了重建圖片基礎知識利用前面用代碼標定過的相機。 三維重建所需的步驟 有很多方法可以重建周圍的世界,但都可以歸結為需要得到一張準確的深度圖。 深度圖中的每一個像素都表示的是深度信息(而不是顏色信息)。它一般都是用灰度圖的形式展現(xiàn)出來。
Tsukuba 數(shù)據(jù)集的深度圖。由OpenCV提供 如前所述,獲取一張深度圖有很多不同的方法,而這些方法都取決于所使用的傳感器。一種傳感器可以是一個簡單的攝像機(從現(xiàn)在起在我們將稱為RGB攝像機),但也可以使用其他傳感器,如激光雷達或紅外線或兩者的組合。 傳感器的類型將決定深度圖的精準程度。根據(jù)精確度從大到小排列依次是激光雷達>紅外線>相機。深度圖也可以著色以更好的顯示深度。
我的Kinect相機自拍圖 根據(jù)所用傳感器的類型,實際獲取深度圖需要的步驟或多或少。例如,Kinect相機使用結合了RGB相機和紅外傳感器,因此您可以立即獲得一張深度圖(因為它是由紅外傳感器處理的信息)。 但是,如果您除了手機攝像頭之外什么都沒有,該怎么辦?在這種情況下,您需要進行立體重建。立體重建和使用您的大腦和眼睛用來實際理解深度的原理是一樣的。 其要點在于從兩個不同的角度看同一張圖片,并在兩張圖片中尋找相同的事物,并從位置的差異推斷出深度。這稱為立體匹配。 為了進行立體匹配,重要的是使兩張圖片具有完全相同的特征。換一種說法,兩張照片都不應該有任何失真。這是一個問題,因為大多數(shù)相機的鏡頭會導致不同程度的畸變。這意味著為了精確地進行立體匹配,需要知道相機的光學中心和焦距。 在大多數(shù)情況下,這些信息是未知的(尤其是對于您的手機攝像頭),這就是為什么立體3D重建需要以下步驟的主要原因: 1. 相機校正:使用一組圖像推斷相機的焦距和光學中心 2. 圖像畸變:去除重建要用到的圖像中的鏡頭畸變 3. 特征匹配:在兩張圖片之間尋找相似的特征并構建深度圖 4. 重投影點:使用深度映射將像素重投影到三維空間中。 5. 構建點云:生成一個包含三維空間中的點的新文件以進行可視化。 6. 構建網(wǎng)格以獲得實際的三維模型(不在本教程的范圍內,但很快將在其他教程中提供) 步驟1只需執(zhí)行一次,除非更換攝像機。而每次你獲得一對新照片時,都需要重新執(zhí)行一遍第2-5步……大概就是這樣子。 實際的數(shù)學理論(為什么)要復雜得多,但是在本教程之后,它將更容易處理和理解,因為你將在閱讀完本文之后獲取一個實例,你可以進行各種的實驗。 在下一部分中,我們將探討如何實際校準手機攝像頭,以及一些校準的最佳實踐操作。
責任編輯:lq
-
iPhone
+關注
關注
28文章
13442瀏覽量
201345 -
三維
+關注
關注
1文章
489瀏覽量
28923 -
OpenCV
+關注
關注
29文章
625瀏覽量
41215
原文標題:使用iPhone相機和OpenCV來完成3D重建(第一部分)
文章出處:【微信號:livevideostack,微信公眾號:LiveVideoStack】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論