正弦结构光三维重建
本文為作者學習過程中的筆記,想了解更多內容可以訪問原作者主頁https://blog.csdn.net/u010430651?spm=1001.2014.3001.5509
結構光三維重建是其中一種熱門的、精度高、速度快且無接觸式的技術。
正弦條紋結構光是被廣泛運用的一種,只需要一個投影儀一個攝像頭就可以搭建正弦條紋結構光系統。
一般,利用投影儀將正弦條紋投影到被測物體上,利用攝像頭拍攝被物體高度所調制的變形條紋圖樣,得到變形條紋圖樣后,非常重要的一步就是從條紋中獲取相位信息,一般有傅里葉變換輪廓術(FTP),相位測量輪廓術(PMP)這兩種,在得到相位信息后,由于相位是通過反正切(atan2)求出來的,所以會被截斷在[-π,π]或者說是[0,2π]之間,因此另一個關鍵且重要的一步就是相位解包裹,最后建立相位——高度映射就可以求出物體的三維形貌。
相位的重要性
現在有兩張圖片,一張是愛因斯坦,另一張是蒙娜麗莎,對這兩張圖片分別做傅里葉變換得到各自的幅度譜和相位譜
當然,只看兩張圖片的幅度譜和相位譜是看不出來哪個更重要的,但現在我們把
1.愛因斯坦圖像的幅度譜和蒙娜麗莎圖像的相位譜結合,并做逆傅里葉變換,看起來是蒙娜麗莎
2.蒙娜麗莎圖像的幅度譜和愛因斯坦圖像的相位譜結合,并做逆傅里葉變換,看起來是愛因斯坦
?
?我想這個例子就很好證明了圖像的相位的重要性了。
最后劃個重點:
圖像的相位譜中,保留了圖像的邊緣以及整體結構的信息,
而錯誤的幅度譜看起來則像是噪聲覆蓋在原圖上,但對并沒有影響圖像的內容本身。
?
變形條紋獲取相位信息
FTP和PMP各有優點,可以根據實際測量的場合選用,下面簡單列舉一下兩種方法的優缺點
FTP:
優點:只需要一幀條紋圖像,就可以得到一張相位圖,速度快
缺點:由于傅里葉變換是全局的分析方法,一旦遇到被測物體表面劇烈變化或者斷裂的情況,就沒有辦法提取正確的相位了。對此也有提出用加窗傅里葉變換來加強局部分析能力(南洋理工的Kemao Qiao教授有相當多的相關研究的文章,有興趣可以讀一讀)。
另外,FTP需要提取基頻分量,但出現頻譜混疊(overlapping)的情況,同樣不能正確提取相位,對應的解決方法是將濾波的矩形窗改成漢明窗等窗函數,也有文章提出modified FTP,其實也是設計更合適的濾波器來減少頻譜混疊的影響。
?
PMP:
優點:FTP的缺點,PMP應該可以完美解決,精度高,可測量的高度范圍更大,不受被物體表面劇烈變化或斷裂影響,也不受物體表面反射率不同的影響。
缺點:由于使用相移方法,所以需要兩幀或以上條紋圖像來獲取一張相位圖。
?
FTP實際上就是從變形的條紋圖樣中獲取條紋的相位的一種方法。
主要的步驟如下:
物理推導
對于條紋圖樣,可以寫成光強的函數的形式,也可以寫成泰勒展開后的形式,這里需要留意的是他們的相位,FTP的最終目的就是要得到。
對或者做x方向上的1D傅里葉變換(實際操作中實際是做二維傅里葉變換),在得到設計相應濾波器,將其中一個基頻分量濾出(如下圖中的Spectrum,頻譜中有對稱的基頻分量,因為是一樣的,所以只需要其中一半就可以了)。
?
濾出基頻分量后做傅里葉逆變換,就可以得到右邊的式子,這式子中只含有基頻。
剛剛提到要提取相位,因此對取共軛,然后將他們相乘,對相乘后的式子取復對數就可以提取出相位了,相位在式子的虛部中。當然,在實際操作中,相乘和取對數的操作都是不需要的。
?得到相位之后,因為通過反正切來求相位,因此相位會截斷在[-π,π]或者是[0,2π]之間
PMP和FTP的目的是一樣的,就是為了提取相位
如下圖,攝像機得到的一張條紋圖像可以用來表示,下標n是指第幾幅條紋圖像。其中A可以認為是環境光強,B是條紋投影上去后的調制光強,是條紋的相位,最后的就是相移。
PMP的相移要求n張條紋圖像的總相移是,也就是說,每張圖片的相移量為
舉個栗子,三步相移每張圖片相移量為,而四步相移每張圖片相移量為
最終目的要提取相位,就是要得到,可以通過上圖右邊的公式來獲取,這個公式的實質
實際上那一堆求和的目的就是把和給湊出來
三步相移
?三步相移的三張條紋圖像的表達式如下圖左邊,每次相移。
?
其中相位公式可能和上面提到的不太一樣,但實際上還是在湊和
紋理(texture)可以認為是環境的光強,也就是被測物體的反射光,可以用A來表示
背景,也就是調制度(modulation),也就是B,這一個式子可以通過閾值化得到一個mask,用來去除背景
?
投影到被測物體上
?
求出來的相位圖,OpenCV顯示,
?
四步相移
?四步相移的四張條紋圖像的表達式如下圖左邊,每次相移。
從四步相移的公式就很明顯看到是相位是在湊出和
?投影到被測物體上是醬紫滴
最后求得的相位圖,OpenCV顯示
相位解包裹
由FTP和PMP得到的相位圖像是包裹相位圖也叫截斷相位圖,即相位被截斷在[-π,π]之間,需要相位解包裹得到連續相位。應該是結構光三維重建非常重要的一步,在我看來,說是最重要的也不為過。
(后面灰色部分可以不看)
只要被測量面的高度相差不是設置特別大,可以采用最簡單的Itoh's method的一維解包裹方法來解包裹
基本思路是:
同一行前后兩個點的相位作比較,如果后一個點的相位比前一個點的相位大π,則后一個點的相位減2π;如果后一個點的相位比前一個點的相位小π,則后一個點的相位加π。
Itoh方法可以總結為?:連續相位可以通過累加截斷相位的差值的截斷而求得,也就是表示為下面的式子
根據Itoh方法,可以將一維相位解包裹推廣到二維相位解包裹中,可以用以下式子來表示:
式中,?為?點的連續相位,?為起始的點的連續相位,?為相位圖中連接點和點的任意路徑,?為相位差。選取相位圖中的某一行(列)作為起始行(列),遍歷相位圖的每一行(列),比較相鄰兩個點的相位值,若相鄰兩點的相位差大于?pi,則后一個點的相位加2pi ;若相鄰兩點的相位差小于-pi ,則后一個點的相位減2pi ;若相鄰兩點的相位差大于-pi且小于pi ,則不需要進行操作直接比較下一個位置。
直接用最簡單的方法去相位解包裹,對形狀較簡單的物體,仍然會存在一些噪聲,而對于形狀復雜的物體是完全不可行的。
但當采用合適相位解包裹算法,即使是人臉,也是可以解出來的
從二維相位解包裹的式子中可以看出來,這一個路徑積分要保證每一次算出來的點連續相位都一樣,那就應該是一個與路徑無關的計算過程。但是在實際的相位解包裹的過程中可以發現,選擇了不同的路徑,往往得到的相位值也不一樣,這是實際獲取的相位圖存在采樣率不足導致的相位混疊、獲取過程中引入的相位噪聲、奇異點等因素導致的,這也導致了正確的二維相位解包裹,是一個與路徑有關的問題。
正是因為解包裹過程與路徑有關的問題,導致二維相位解包裹變得困難。
在相位圖上,到底是什么導致相位解包裹與路徑有關,這個問題其實早有相關研究了,下面稍微列一列。
1987年,Ghiglia, Mastin, Romero等,用‘inconsistencies’來定義導致與路徑有關的點,發現這些點具體局限在某些位置或區域,可以通過遍歷整個相位圖,在每一個2*2pixel的環路中累加包裹相位的相位差來檢測出整個相位圖中的‘inconsistencies’。
1988年,Goldstein, Zebker, Werner用‘residues’這個術語,也就是殘點,來描述inconsistencies。(之所以用‘residues’,應該和復變函數的留數定理有關系
至此,就發現了殘點是在相位圖中導致相位解包裹與路徑有關的原因。
Ghiglia等進一步提出的相位解包裹與路徑無關需滿足的四個條件
以上4個條件,我認為重點要關注的是第3個,這也是殘點計算的需要。相位圖中,相位差的環路積分要等于0?,其實稍微想一想就能理解這個要求,之前講得Itoh方法,以及拓展到二維相位解包裹的公式還記得嗎?我這再放出來一次,
Itoh方法:連續相位可以通過累加截斷相位的差值的截斷而求得
二維相位解包裹:
把上面的式子里的路徑積分,稍微改一改寫成環路積分的話,起始點和終點都選擇r
這很明顯,這個環路積分一定要等于0的嘛。
實際上,對于一幅完美的相位圖,相位差的環路積分一定是等于0的,且不管選擇任何路徑都要成立。
那問題來了,假如在一幅相位圖中,相位差的環路積分不等于0是否存在呢?答案是存在的,而且這就是所說的殘點導致的。
那怎么去計算檢測殘點就顯而易見了,找出相位差環路積分不等于0的地方就對了。但路徑選擇這么多,怎么找才好呢?那就找最小路徑唄。相位圖中,最小路徑就是一個2*2pixel的小塊嘛。所以殘點其實不是指一個點或者說一個pixel,而是指一個2*2pixel的小塊。解包裹算法為了便于標記殘點,這個2*2的方塊里,會約定標記左上角的那一像素為殘點。
殘點就是計算2*2pixel里面相位差的環路積分,具體如下圖所示:
且研究還發現,計算這個環路積分,只有3種結果,0,±1(所有相位值都除了2pi)。當charge(環路積分)計算等于0,這是一個正常的位置,等于+1,定義為正殘點,等于-1,定義為副殘點。
計算出殘點,也就是找出了導致解包裹與路徑有關的原因了,那解包裹的路徑只要躲開這些殘點,自然解包裹就和路徑無關了,而且能保證解包裹的結果準確,因此也從中發展出了很多相位解包裹算法,例如Goldstein枝切法(Goldstein branch cut)、質量圖導向法(quality guide phase unwrapping)、掩膜切割法(mask cut)等。
兩類相位解包裹算法
一般都是分為兩類,不過有兩種分類方式,
第一種是在Ghiglia的Two-Dimensional Phase Unwrapping: Theory, Algorithms, and Software書中的分類,相位解包裹算法分為兩類,一類是路徑跟蹤方法(path-following methods),另一種是最小范數方法(minimum-norm methods),
(PS:最小范數基本沒人用)
第二種分類在目前的綜述文章里面出現頻率非常高,應該最為人所熟悉。
相位解包裹算法分為兩類,空間(空域)相位解包裹(Spatial phase unwrapping),時間(時域)相位解包裹(temporal phase unwrapping)。
空間相位解包裹其實就是第一種分類里面所說的路徑跟蹤方法(path-following methods)。這一類算法實際上就是在相位圖中找一條最優的解包裹相位路徑,是在同一個空間中進行相位解包裹的,所以稱為空間相位解包裹。
經典的算法有:Goldstein枝切法(Goldstein's branch cut algorithm)、質量圖導向法(quality guide phase unwrapping algorithm)、掩膜切割法(mask cut algorithm)等
空間相位解包裹在同一張相位圖中,根據某一點與其鄰點的相位差進行解包裹相位(Itoh方法),因此解包裹獲得的相位被稱為相對相位(relative phase map)。它只需要一張相位圖即可完成,但各點的相位解包裹運算都是跟周圍的鄰點有關,一旦某點的相位由于相位混疊、相位噪聲導致解包裹錯誤,其錯誤會傳遞到后續所有點的相位解包裹過程中,這種錯誤傳遞又被稱為“拉絲現象”。
時間相位解包裹是通過在不同時間得到的兩個或多個不同頻率的相位圖來進行解包裹。它是在時間序列上通過進行解包裹的,所以稱為時間相位解包裹。
常見的算法有:
1.多頻法Multi-frequency (hierarchical) ,顧名思義,用多個頻率的相位圖分級解包裹相位
2.多頻外差法Multi-wavelength (heterodyne),通過將兩個頻率接近的相位圖差頻得到一個頻率很小的相位圖,進行解包裹
3.幾何約束的多頻分級法Geometrical constraint ,基本類似于多頻法。
(我也不確定翻譯合不合適,中文文獻看得比較少不確定通用的翻譯是啥)
時間相位解包裹是根據同一位置(像素)不同時間得到的相位圖來進行相位解包裹,獲得的相位被稱為絕對相位。在時間相位解包裹過程中,每個點的相位只與不同頻率的相位圖上同一位置的點有關,與其鄰點無關,因此即使某點的相位由于相位混疊、相位噪聲導致解包裹錯誤,這樣的錯誤并不會傳遞。
相位——高度映射
根據系統和被測物體的幾何關系,可以得到相位和高度的映射關系,最后就可以求出物體的高度信息了。
總結
- 上一篇: Unity Run Time Gizmo
- 下一篇: c语言main必须返回int,C语言 错