4

我正在研究運動應用程序中的結構,並跟蹤放置在對象上的一些標記以確定對象的剛性結構。如何處理來自運動優化/束調整的結構中缺失的數據

該應用程序本質上是對多個攝像機視圖使用標準Levenberg-Marquardt優化,並最大限度地減少預期標記點與2D視圖中從每個視圖獲取的標記點之間的差異。

對於每個標記點,並且每個查看下面的函數被最小化:

double diff = calculatedXY[index] - observedXY[index] 

凡calculatedXY值取決於許多需要通過優化被發現和observedXY是在標誌點位置未知參數的2D。總的來說,我有(標記點*視圖)函數的數量,如上面我想要最小化的函數。

我已經編碼了一個模擬攝像機看到所有的標記點,但我想知道如何處理運行過程中的情況點是不可見的,由於照明,遮擋或只是不在相機視圖。在應用程序的真實運行中,我將使用網絡攝像頭查看對象,因此很可能不是所有標記都會一次顯示,並且取決於我的計算機視覺算法的穩健性,我可能無法檢測到標記一直。

我想在設置diff值爲0(西格瑪平方差= 0)的情況下,標記點不能被觀察到,但是這會扭曲結果嗎?

我注意到的另一件事是,當呈現太多的視圖時,算法不是很好。當提出太多觀點時,更可能估計出一個糟糕的解決方案。這是捆綁調整的一個常見問題,因爲在呈現太多視圖時,由於遇到局部最小值的可能性增加了?

回答

1

通常的做法是忽略與缺失標記相對應的術語。 IE瀏覽器。如果術語沒有observedXY,則不要儘量減少calculateXY-observedXY。沒有必要將任何東西設置爲零,你甚至不應該首先考慮這個術語 - 只是跳過它(或者,我想在你的代碼中,它相當於將錯誤設置爲零)。

如果您只是簡單地在其上投射大量的觀察值,束調整可能會非常糟糕。先解決一些視圖,然後繼續添加,逐步構建解決方案。

您可能想嘗試某種「健壯」的方法。而不是使用最小二乘,使用「損失函數」1。即使有一些不正確的觀察,這些也可以讓您的優化生存下來。您仍然可以在Levenberg-Marquardt框架中執行此操作,您只需將損失函數的導數合併到雅可比行列式中即可。