點擊上方「3D視覺工坊」,選擇「星標」git
乾貨第一時間送達github
![](http://static.javashuo.com/static/loading.gif)
這種逼真的效果,一個很重要的緣由是獲取到了人臉表面的法向量。在文章中我還提到,當須要在不一樣的視角下重建反射場時,是「經過表面的漫反射份量」來完成的,但這是如何作到的呢?算法
![](http://static.javashuo.com/static/loading.gif)
這就引入了咱們今天想要講的主題:光度立體法微信
1、光度立體法原理
光度立體法,即Photometric Stereo, 最先是由當時在MIT的人工智能實驗室的Robert J. Woodham教授在1978年左右提出,比較系統的闡述能夠看他在1979年的論文《Photometric stereo: A reflectance map technique for determining surface orientation from image intensity》,以及1980年的論文《Photometric Method for Determining Surface Orientation from Multiple Images》。架構
![](http://static.javashuo.com/static/loading.gif)
這種方法的用途是能夠重建出物體表面的法向量,以及物體不一樣表面點的反射率,最關鍵的是它不像傳統的幾何重建(例如立體匹配)方法那樣須要去考慮圖像的匹配問題,由於所須要作的只是採集三張以上,由不一樣方向的光照射物體的圖像。這個過程當中,物體和相機都不動,所以圖像自然就是對齊的,這使得整個過程很是的簡潔。學習
Woodham的論文有三個假設:人工智能
首先,他假設相機的投影是正交投影。這樣圖像上的點的座標能夠直接反映三維物體的表面座標。spa
若是用 z = f(x, y)表示三維物體的表面座標關係(世界座標系原點位於物體與光心連線上),那麼表面法向量應該是:視頻
由於三維物體表面的(x, y)點在這種假設下直接對應着圖像上的(x, y)點。那麼就能夠經過圖像上的(x, y)點的相關特性求取到物體表面上對應點的法向量了。blog
![](http://static.javashuo.com/static/loading.gif)
比較好的知足這個假設的相機是遠心相機,我在文章32. 鏡頭、曝光,以及對焦(下)中對這種相機由詳細介紹,你能夠回顧下。
2. Woodham還假設入射光由遠處的單一點光源發出,這樣照射到物體表面每一點的光的方向一致,強度一致。
3. 同時,Woodham假設物體表面具備lambertian反射特性,即它對入射光產生漫反射,在每一個方向上反射的光強都是一致的。
這種狀況下,能夠把像素值與光源以及物體表面法向量用下圖的公式聯繫到一塊兒。
![](http://static.javashuo.com/static/loading.gif)
這裏面, 和N表明了物體表面的特性,而L和l則表明了光源的方向和強度,因而能夠分別合併表示以下。N和L都是三維空間中的3x1的單位向量,光源的強度能夠用常量1表示。像素值t能夠直接經過圖像得到,右邊的光源方向能夠提早標定求得。那麼,就能夠在物體和相機都不動的狀況下,用至少三個不共面的光線照射物體表面第i點,從而將N和
求解出來:
設三個光源方向向量構成矩陣 ,對應的三個像素值構成向量
,那麼有
(假設
存在)
因爲光源照射物體表面時,有可能會產生陰影,這樣三個光源沒法同時照亮的區域就會沒法求解出結果。因此一般能夠採用更多的光源從不一樣方向分別照亮物體併成像來解決這個問題。假設有n>=3個光源,那麼則有:
那麼
二. 使用光度立體法的基本過程
理解了光度立體法的原理後,咱們來看看實際操做的過程。威斯康星-麥迪遜大學的課程CS766_09對此有簡明扼要的解釋(原連接見pages.cs.wisc.edu/~csve),我這裏借用相關材料介紹一下。
2.1 光源方向的標定
首先第一步,是進行光源方向的標定,一種可行的方法是在場景中放入一個光滑的球並在不一樣光源下成像,這樣球的表面高亮處就會反映光源的方向
這裏光源方向L,球表面法向量N,以及反射方向R之間的關係以下
有L = 2(NR)N-R
其中R是反射向量取爲[0, 0, 1],是觀察者到物體的向量, 是高亮點的座標,
是圖像上球心的座標。那麼就有N的表達式:
利用N和R,就能夠求得光源方向L。
2.2 計算法向量圖和深度圖
利用第一節的原理和公式,能夠很容易求得物體表面上每個被足夠多的光源照亮的點的法向量。接下來的關鍵則是利用法向量圖,獲取深度圖。
設投影關係以下圖所示:
物體表面法向量N與物體表面上的向量V1及V2垂直,那麼有:
以及
![](http://static.javashuo.com/static/loading.gif)
仔細觀察上面兩個式子,會構成一個線性表達式:
Mz = v
其中v由各個像素點的法向量技術而得,M則是一個尺寸爲(2*m, m)的稀疏矩陣,其中m爲像素個數,z則是各個像素點的深度座標構成。這個式子能夠線性二乘法求解,這樣就求得了深度圖。
這裏有一些示例圖,說明了整個流程。
這個數據集是同一佛像由12個不一樣方向光源分別照射成像的結果。
利用光度立體法,能夠計算獲得反照率圖以下,注意這裏咱們對圖像的每一個顏色通道都作了獨立運算,而不是把圖像轉換爲灰度圖計算。
![](http://static.javashuo.com/static/loading.gif)
利用前面介紹的原理,能夠獲取到表面法向量,進一步獲取到相對深度圖,甚至還能夠作三維渲染,以下圖所示:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
下面是另一個示例圖集
重建結果:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
三. 光度立體法和傳統幾何重建方法的對比
正如Woodham的論文中所說,光度立體法並非用於取代傳統幾何重建方法的,而是和幾何重建方法構成了互補關係。下面我列出了這兩類方法的對比:
![](http://static.javashuo.com/static/loading.gif)
四. 光度立體法在機器視覺中的應用
光度立體法不只僅在Light Stage這樣的系統中使用,在機器視覺、工業生產領域它的應用也很是普遍,我來給你看一些實際應用。若是你具備機器視覺的背景,那麼大家必定知道一款很是很是流行的軟件系統 Halcon。
HALCON是德國MVtec公司開發的一套完善的標準的機器視覺算法包,擁有應用普遍的機器視覺集成開發環境。它節約了產品成本,縮短了軟件開發週期——HALCON靈活的架構便於機器視覺,醫學圖像和圖像分析應用的快速開發。在歐洲以及日本的工業界已是公認具備最佳效能的Machine Vision軟件。
---- 引自百度百科
Halcon內置了大量機器視覺的教學案例,有好幾個例子都跟光度立體法相關,咱們看看幾個實例:
示例1:檢測平坦平面上的缺陷塊
這個例子展現了用光度立體法獲取平坦平面的反照率,以及法向量圖(即梯度圖),並由此計算表面高斯曲率圖,在這個圖上一般比較容易檢測出異常塊(但在反照率圖,以及原圖上很難檢測出來)
示例2:檢測洗髮水瓶上的缺陷
這個例子展現了用光度立體法獲取洗髮水瓶上的缺陷。也是同樣的,用不一樣方向的光照射瓶子,而後利用光度立體法獲取表面反照率圖,以及法向量(從而得到曲率圖)。在反照率圖上很難看出的缺陷,在後者卻能夠輕鬆檢測出來。
示例3:讀取盲文
讀取藥包裝上的盲文,也能夠由光度立體法來辦到,仍是同樣,盲文這樣的表面凸起,比較容易在曲率圖或法向量圖上檢測出來:
Halcon裏面關於光度立體法的算子是photometric_stereo,其幫助文檔寫的很清晰,有一些信息能夠補充咱們對這個技術的理解。
要點1:光源的方向和數量
![](http://static.javashuo.com/static/loading.gif)
Halcon建議將遠心相機正對着目標物表面,光源相對相機光心與目標的連線傾角呈Slant度,通常是30到60度。在改變光源方向時,傾角不變,將光源繞物體的中軸線旋轉Tilt度便可。如上圖所示。一般來講須要4~6個不一樣的光源方向,所以能夠認爲Tilt大概是60度~90度之間,保證各個光源方向均勻覆蓋物體表面一週。
要點2:相機成像的線性性
我在文章2. 從入射光到JPEG相片-數碼相機內部的祕密和27. HDR - 高動態範圍成像中都講過,相機內部成像時有從線性的響應轉換爲非線性的最終圖像的過程
![](http://static.javashuo.com/static/loading.gif)
而光度立體法的隱含假設則是圖像像素的值是線性反應了光源和反射的強度,所以有必要採用RAW格式圖像來得到準確的結果。Halcon還專門提供了算子radiometric_self_calibration用於獲取相機的特性,以及算子lut_trans來將非線性的像素值轉換爲線性的,這裏就不展開講解了。
五. 總結
今天我詳細介紹了光度立體法這種獨特的獲取物體表面法向量的反照率的方法,它和利用幾何信息重建三維表面的視覺方法(例如立體匹配)造成了互補關係。這個方法從提出到如今已通過去了40年左右了,但如今還在工業界普遍應用,好比咱們上一課介紹的Light Stage系統就採用了光度立體法來獲取人臉表面的法向量,而工業視覺軟件Halcon則展現了用此方法來進行缺陷檢測。Woodham教授功不可沒!
但願這篇文章開闊了你的眼界,帶給你新的啓發,別忘了點贊哦????
六. 參考資料
CMU 2017 Fall Computational Photography Course 15-463, Lecture 22
44. Light Stage: 無限真實的人臉三維掃描——忘記幼稚的AI換臉吧
Woodham et al., 「Photometric stereo: A reflectance map technique for determining surface orientation from image intensity,」 IUSIA 1979.
32. 鏡頭、曝光,以及對焦(下)
威斯康星-麥迪遜大學的課程CS766_09項目
Sticky在問題"光度立體三維重建,根據光照模型算出物體表面法線後如何計算出深度?"下的回答
Halcon HDevelop 19.11 Progress的示例和幫助文檔
本文僅作學術分享,若有侵權,請聯繫刪文。
下載1
在「3D視覺工坊」公衆號後臺回覆:3D視覺,便可下載 3D視覺相關資料乾貨,涉及相機標定、三維重建、立體視覺、SLAM、深度學習、點雲後處理、多視圖幾何等方向。
下載2
在「3D視覺工坊」公衆號後臺回覆:3D視覺github資源彙總,便可下載包括結構光、標定源碼、缺陷檢測源碼、深度估計與深度補全源碼、點雲處理相關源碼、立體匹配源碼、單目、雙目3D檢測、基於點雲的3D檢測、6D姿態估計源碼彙總等。
下載3
在「3D視覺工坊」公衆號後臺回覆:相機標定,便可下載獨家相機標定學習課件與視頻網址;後臺回覆:立體匹配,便可下載獨家立體匹配學習課件與視頻網址。
重磅!3DCVer-學術論文寫做投稿 交流羣已成立
掃碼添加小助手微信,可申請加入3D視覺工坊-學術論文寫做與投稿 微信交流羣,旨在交流頂會、頂刊、SCI、EI等寫做與投稿事宜。
同時也可申請加入咱們的細分方向交流羣,目前主要有3D視覺、CV&深度學習、SLAM、三維重建、點雲後處理、自動駕駛、CV入門、三維測量、VR/AR、3D人臉識別、醫療影像、缺陷檢測、行人重識別、目標跟蹤、視覺產品落地、視覺競賽、車牌識別、硬件選型、學術交流、求職交流等微信羣。
必定要備註:研究方向+學校/公司+暱稱,例如:」3D視覺 + 上海交大 + 靜靜「。請按照格式備註,可快速被經過且邀請進羣。原創投稿也請聯繫。
![3D視覺工坊小助理微信.jpg.jpg](http://static.javashuo.com/static/loading.gif)
▲長按加微信羣或投稿
![](http://static.javashuo.com/static/loading.gif)
▲長按關注公衆號
![3D視覺工坊小助理微信.jpg.jpg](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
3D視覺從入門到精通知識星球:針對3D視覺領域的知識點彙總、入門進階學習路線、最新paper分享、疑問解答四個方面進行深耕,更有各種大廠的算法工程人員進行技術指導。與此同時,星球將聯合知名企業發佈3D視覺相關算法開發崗位以及項目對接信息,打形成集技術與就業爲一體的鐵桿粉絲彙集區,近2000星球成員爲創造更好的AI世界共同進步,知識星球入口:
學習3D視覺核心技術,掃描查看介紹,3天內無條件退款
![](http://static.javashuo.com/static/loading.gif)
圈裏有高質量教程資料、可答疑解惑、助你高效解決問題
以爲有用,麻煩給個贊和在看~ ![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)