關鍵詞:基於圖像的三維重建 單目視覺 極簡原理 總體框架 作者:李二 日期:14/04/2020 - 16/04/2020
本系列博客從這里開始,進入第二部分,也就是三維重建。
我覺得不能一下就陷入到具體的步驟或者流程中去,講東西最好先給大家一個總的輪廓以及其核心原理,這樣由淺入深,由粗到精,更容易接受與吸收。
本期博客僅僅介紹三維重建的核心原理,里面涉及的要素或模塊,我將在后面的幾期中逐個展開。
話不多說,還是恢復講故事模式。話說李二在家喜歡上了寫博客,天天在陽台上碼字,家里人越看他越不順眼,因為感覺他似乎並沒有干什么正經事,於是就有了下面的對話。
1. 什么是三維重建
李二的老婆Mme.Zhang問:我說咱天天地也不出去溜達溜達,看你都快廢了。前幾天看你在朋友圈里面發二維成像與三維重建,費勁巴力的寫了這么長時間,想干點啥? 話說什么是三維重建?
李二覺得難得老婆想了解自己做了點啥事,於是便高興地說道:簡單點說,三
維重建≈三維點雲獲取。如果較起真來,三維重建=三維點雲獲取+幾何結構恢復+場景繪制。我講的三維重建指的是
基於圖像的三維重建,直白點說,就是從一系列圖像中恢復三維點雲。
注意:點雲構建之后的幾何結構恢復(即三維格網化)和場景繪制(即紋理貼圖),則不在本系列的scope之內。
2. 三維重建有什么用
Mme.Zhang:那三維重建有什么用處?
李二:太多了。根據重建到的三維物體,可以准確測量它的三維結構。
例1. 比如咱們去巴黎的時候,很遺憾的沒有參觀巴黎聖母院,他 不是被火燒了嘛。這時我們根據以前測量到的三維結構,就可以原汁原味的恢復它火燒之前的面貌。 例2. 再比如,現在虛擬現實、增強現實不是都很火嘛,關鍵就是把三維建出來。 例3. 還有關於我的近地面植被遙感工作,只有把樹和作物的三維建立出來,才能更好地測量他們的一些參數,比如生物量、葉傾角之類的。 假如我們只看圖像,它缺失了距離信息,扭曲了物體之間的角度信息,我們沒法基於影像做一些准確的測量。
了解一下:計算機視覺包含兩個基本方向,物體識別和三維重建。
-
圖像識別的突破性進展源自於2012年卷積神經網絡的興起(AlexNet) -
三維重建是未來的必然趨勢,我們生活在三維空間里,必須將虛擬世界恢復到三維,才能和環境進行交互。 -
三維重建和圖像識別將逐漸融為一體。
3. 需要什么設備來重建三維
Mme.Zhang忽然覺得李二每天也不是瞎胡鬧了,倒是有點用處了,於是便問起來:那用什么設備能獲取三維信息呢?
李二見老婆挺上道,話匣子便打開了:剛才我說了,三維重建其實可以認為就是獲取三維點雲,那么點雲獲取的方式有三種:
激光雷達LiDAR,直接對三維進行測量, 直接得到三維點雲;深度相機,比如Kinect,也是直接獲取三維信息,其實感覺不能叫做三維,算是 2.5維,得到深度圖;雙目立體視覺,兩個 標定好的相機,通過同時拍照以及立體視差獲取三維信息,可以類比於人眼;攝影測量就是這么干的。單目視覺,也就是一個相機,通過 一系列照片,根據某些算法,恢復三維。
(每一項的具體信息,不做展開了,各位看官請自行出門左轉了解)
Mme.Zhang堅定的說:那還弄啥嘞,直接LiDAR上呀。
李二突然一下不知道該咋解釋了,便含糊的說道:
LiDAR不是貴嘛,目前一般人買不起,等到跟相機差不多錢了可能就行了。 深度相機的左右距離有限,只能最多 3-5米的范圍吧。雙目立體視覺需要 兩個位置、姿態標定好的相機,弄起來比較費勁,萬一你磕了碰了弄彎了,還得重新標定。單目視覺就很方便了,一個相機, 通過運動,就可以恢復三維,而且這個還有紋理與色彩信息,對於圖像識別也是有好處的。
(我解釋的可能不夠,但是應該把主要問題包含了)
Mme.Zhang若有所思,突然說道:其實單個相機也不好,因為這樣你們男生可以只用一個手機,准確計算出女生的三圍、身高、體重了。 李二:這..... 唉.....
4. 基於圖像的三維重建 - 極簡原理
Mme.Zhang終於開始問點關鍵的了:那你大致說說怎么樣基於一個相機恢復三維點雲呀,就是你前面說的
基於圖像的三維重建。不過我是文科生,你別講太深了。
李二自信滿滿的說:別說你是文科生,你就是初中生,我都給你講明白了。核心原理十分簡單,肯定能聽懂。
(各位看官若是看不懂,評論區寫差評)
李二開始了表演:
准備材料:我們剛剛說到,必須要
一系列的圖像才行,而且圖像之間要有重疊,不能拍的東西完全不同,否則咋重建。不妨拿四張圖像來解釋一下三維重建。
極簡思路:假如這四幅影像是在不同視角拍攝的同一地物,由下圖可以看出,這四幅影像同時看到了地物的一些相同的地方,比如我們知道每幅影像的拍攝位置(或者
光心(焦點)位置) 以及姿態 (嗨,看官們,其實就是外方位元素),它們在不同視角都看到了點 ,那么就可以通過圖像 的 、點 對應的像素位置恢復出視線(line of sight),一共四條視線。因為所有的視線都應該交於點 ,因此構成了6個空間三角形。
其實一個空間三角形,就能夠確定點 的空間位置,就是 三角定位(triangulation)。在極簡思路中,你可以認為多出的空間三角形沒用。(備注一下,是非常有用的,因為噪聲的問題)。不一定在每幅圖像中都必須出現點 ,理想情況下,兩幅就夠了,因為兩幅圖像的視線就可以構造一個空間三角形進行三角定位。(備注一下,事實上至少三四張,才能有理想結果)。 這四幅影像其實不止同時看到了點 ,他們可能同時也看到了其他很多點,這時就能夠構成點雲啦,也就恢復三維了
(如果僅僅想了解三維重建的核心原理的看官,看到這就夠了。之后無非是怎么找特征點,確定同名點,三角定位確定三維點,因為誤差所以需要不斷優化調整,得到最終的三維點以及相機的內外方位元素)
Mme.Zhang很高興,她覺得她已經已經理解了,便說:就這么點事呀,那你前段時間又買書又查資料的,又費勁巴力的寫二維成像的博客。我的護膚化妝品錢都然你給造了。
5. 基於圖像的三維重建 - 總體框架
李二梗着脖子,漲紅了臉說道:哪有這么簡單,實際中還有好多問題呢。比如我下面要講這些,直到本世紀初,它們的技術才慢慢成形呢,2010年左右才正式到了應用層次。
Mme.Zhang拗不過我,便說:行行行,你自己玩耍吧,我去護膚化妝去了。
題外話:我一看見一桌子護膚品,就想到,相同的錢買點電子產品也好呀。我是人窮志氣短呀!
李二看Mme.Zhang沒有聽下去的欲望,不知是為了表明這事情真不容易,還是因為其他原因,便自言自語地接着說了下去,在實際三維重建中我們會發現幾個問題:
上面說到四幅圖像都看到空間點 ,對應在圖像上的像素點分別為 ,這四個像素點是你人眼識別出來的,但是現在得讓計算機識別出來,而且識別出這四個像素點都對應同一個空間點 ,這就有點難度了。
特征點檢測:圖像中會有很多像素點,一些比較有特征的點更容易識別和表達出來,比如灰度變化劇烈的點,這些點被稱為 特征點或者關鍵點,因此我們可以把每幅圖像的這些特征點先提取出來,這就是特征點檢測。
特征點匹配:每幅圖像的特征點被檢測出之后,我們需要知道圖像與圖像之間,哪些特征點是對應的(比如 ),稱之為 同名點,這就需要對特征點進行匹配。
誤匹配刪除:實際匹配結果可能存在 誤差,也就是很多錯誤匹配的點,因此需要通過某種方式對誤匹配的點進行刪除;
集束調整(或光束法平差):誤差或者噪聲何時何地都是存在的,在構建三角幾何關系時,也不例外。 實際情況中,不同圖像對於同一空間點的視線並不一定能保證交於這一點,因此需要通過某種方式對視線進行調整,使其交於一點。在此過程中,基於成像模型,我們也恢復了相機的位置與姿態等外方位元素,同時實現了點雲的構建;
稠密重建:由於一般特征點數量並不是特別多,因此重建出來的點雲比較稀疏。但是有了相機位姿之后,每幅圖像的每個像元對應的視線我們都知道了,這是就可以根據某種方式,建立稠密點雲,形成比較完整的三維。 這就是基於圖像的三維重建的各個模塊,每個模塊中涉及了很多內容,沒有那么簡單。但是三維重建的核心東西就是這些。
其實所有的商業或開源三維重建軟件的技術路線基本都是一樣,但是一些技術細節不同,造成結果的差異。說明具體的技術細節還是十分重要吧!正如對於世界上絕大多數國家來說,即使拿到DF-17的詳細圖紙,也不一定能造出來。
6. 后記
以上故事純屬虛構,如果Mme.Zhang看到,企盼理解,不要揍我。
接下來的幾期博客,我可能不會講的太細了,因為好多具體內容我自己也不了解,更不敢打腫臉充胖子給各位看官講了。我個人認為:如果不是專門做這個的,僅知其大略或思路即可,不必苛求過深,思路對於我們的借鑒意義更大一些。
