來源:公眾號@3D涉及工坊
作者:書涵
初接觸到相移法的同學,很容易出現這樣一個疑惑,為什么有的論文中選擇三步相移,而有的論文中選擇四步相移,更有甚者選擇五步相移,不同的相移步長到底有什么好處,在重建時又如何根據當前的場景,選擇最合適的相移步長呢?今天筆者就簡單捋一捋,不同的相移步長選擇究竟可能可以帶來什么好處。
首先,我們需要知道,在相移公式中,我們有幾個未知數,以通用公式(n步相移法)來看,在n步相移法中,第m張圖片的公式表示如下:
𝐼𝑚 = 𝐼 ′ + 𝐼 ′′cos (𝜃 + 2𝑚𝜋/𝑁)
要解這個公式,我們知道𝐼m是圖片灰度,N是相移步長,m是當前圖片序號,所以真正未知數是𝐼 ′,𝐼 ′′,𝜃. 其中𝜃是我們要求得真正的相位。由於我們有三個未知數,所以要得到完全解,需要三個方程,這就意味着我們的相移步長至少為三,事實上三步相移法也是最常見的相移法選擇。當相移步長增加的時候,我們會有更多的數據去求這三個未知數,從數據處理的角度說,數據越多,解出來的值對抗噪聲的效果越好。然而,一般來說,如果僅僅從解數據的角度,三步相移解出來的結果就足夠好了。為什么還有選擇更高步長的相移呢?
事實上,這和投影儀本身自帶的非線性誤差有關,一般我們稱這種誤差是gama效應,這個影響的主要是,如果你投影一組灰度圖,從亮度為0一直到亮度255,然而相機捕獲到的灰度變化確不是一個線性變化的。這種灰度失真的影響,會直接影響到相移結果,從而導致結果的不准確。雖然現在有許多方法通過標定,擬合一個公式,去消除這種失真對結果的影響,我們稱為伽馬矯正。這種影響和我們的步長有什么關系呢?有一個簡單的結論,通常情況下,相移步長越長,這種灰度失真對相移的影響越小。也就是說,選擇相對高的相移步長,就可以抵消一部分這種失真帶來的影響。一般來說,五步相移就可以得到一個比較好的抵消,越后面,即使圖片更多,抵消的也不是那么大了。
多的相移步長不僅僅可以幫忙抵消非線性誤差的影響,還可以幫助解圖片中某些由於對投影光的反光造成的過曝點。不同的相移圖片投影到同一點的亮度是不同的,越多的相移步長,相機上同一個點經歷的投影亮度就越多,即使有一些點是飽和了(灰度直接達到255),但是也有很多沒有飽和的點,所以,有以下兩個思路:
思路一 當沒有飽和的點大於等於3時,根據三個未知數只需要三個方程解的原則,記下沒有飽和的點的相移序號,通過推沒有飽和的點的公式的解來直接計算出該點的值。缺點:不同點的非飽和的序號不同,對應的公式就不同。如果相移步長太多,則窮舉的情況太多,所以這種情況下通常只會使用五步或者六步相移,更多的相移步長情況太復雜。
思路二 根據論文1,當相移周期(一個相移所占的投影列數/行數)為偶數時,可以投影相移周期一半的整數倍的相移步長,比如相移周期是20時,相移步長可以是10,20,30…, 可以有效的重建出反光點的相位值。缺點:需要投影太多圖片,在需要考慮重建速度的場景中不是很適用。綜上,相移步長的選擇可以根據實際場景來定,如果你的場景追求高的重建速度,投影三步相移圖片一般都是最佳的選擇,如果你的場景對重建速度的要求不是那么高,而是希望能有更好的精度,不防考慮下四步相移或者五步相移法。如果你還想能夠更好的解決下反光的問題,更高步的相移法也值得你去嘗試。論文[1], High-quality 3D shape measurement using saturated fringe patterns本文僅做學術分享,如有侵權,請聯系刪文。
下載1在「3D視覺工坊」公眾號后台回復:3D視覺,即可下載 3D視覺相關資料干貨,涉及相機標定、三維重建、立體視覺、SLAM、深度學習、點雲后處理、多視圖幾何等方向。
下載2在「3D視覺工坊」公眾號后台回復:3D視覺優質源碼,即可下載包括結構光、標定源碼、缺陷檢測源碼、深度估計與深度補全源碼、點雲處理相關源碼、立體匹配源碼、單目、雙目3D檢測、基於點雲的3D檢測、6D姿態估計源碼匯總等。
下載3在「3D視覺工坊」公眾號后台回復:相機標定,即可下載獨家相機標定學習課件與視頻網址;后台回復:立體匹配,即可下載獨家立體匹配學習課件與視頻網址。