他直接指著螢幕上的一個矩陣說道:
“世界座標系到相機座標系的變換用的是尤拉角表示旋轉矩陣,然後用對極幾何約束求本質矩陣,再用SVD分解做運動恢復。”
“問題就出在這一步,在高速動態場景下,相鄰幀之間的旋轉不是在歐幾里得空間裡發生的,而是在一個彎曲的流形上。
你的SVD分解把非線性約束強制投影到了線性空間裡,相當於把球面座標硬塞進直角座標系,畸變就是這麼來的。”
沈凌的瞳孔縮了一下。
他隱隱約約感覺到問題出在幾何框架上,但一直沒能準確定位到,想不到肖宿一下子就看出來了。
“正確的做法應該是放棄尤拉角,改用四元數表示旋轉,並且在單位四元數構成的S^3球面上直接做最佳化。”
肖宿再次拿起白板筆,在圖紙的另一塊空白區域寫了起來。
“首先,設第k幀到第k+1幀的旋轉四元數為q_k,那麼幀間運動導致的深度估計誤差肯定滿足一個辛結構保持的Halton系統。
然後構造這樣一個辛矩陣它的作用是把高維的投影誤差對映到一個低維的辛商流形上,在這個商流形上,誤差傳播方程就會退化成一個可積系統。”
“這個辛矩陣的定義是= J·?2H,其中J是標準辛形式,H是系統的Halton函式,取為投影誤差在深度方向上的二範數。
?2H是H的Hessian矩陣,在這個特定的幾何設定下,它的閉式解是?2H = (I - n·n^T)/d^2,其中,n是視線方向的單位向量,d是深度值。
這兩個一乘,特徵值就會全部落在單位圓上,所以數值穩定性是自然的,不需要任何額外的正則化。”
沈凌的嘴唇微微顫抖著。
他渾身上下都激動的泛起了雞皮疙瘩。
那個困擾了他一年半的幀間畸變問題,肖宿只是用一組辛矩陣輕輕描淡寫地把它拆解了。
每一步推導都寫得那麼簡單,組合在一起,卻讓他有些頭皮發麻。
這種震撼不是來自結論本身有多複雜,恰恰相反。
它太簡單了。
簡單到讓人覺得,在正確的視角下,這個問題本來就不應該有困難。
“可是我還有一個問題,”沈凌強迫自己冷靜下來,“辛矩陣的方案解決了旋轉部分的畸變,但平移部分的漂移呢?
我們的相機在快速大範圍移動時,深度圖會出現一個緩慢的累積漂移,這個漂移在用了您的辛矩陣修正旋轉後還是會殘留的。”
“那個漂移不是平移帶來的,而是你的深度圖初始值在高速運動下沒有及時收斂。”
肖宿的回答幾乎沒有任何停頓,“可以用非線性互補濾波器來解決。
在低頻段,可以信任慣性測量單元的姿態資料,而高頻段則可以信任視覺里程計的相對運動估計。至於交叉頻率,直接設在視差資料的噪聲頻寬和I漂移頻寬的交點處就可以。
傳遞函式就取n階巴特沃斯(Butterworth)形式,階數n的取值,是由姿態誤差的截止頻率和深度估計的收斂速率共同決定的。
我已經給你們算好了,n取3。”








