4

我明白上面的問題是廣泛而模糊的。 但要放入上下文中: 我試圖確定相機的姿態和位置估計的準確性。我已經花了幾個星期校準和嘗試不同的方法和不同尺寸的板,照明,距離等什麼是最好的相機標定方法?

我已經試過的方法:

描述:

  • 使用約20各種取向的圖像和位置在照相機前面的每個
  • 對於尺寸25mm的32毫米9x6棋盤與50mm塊
  • 在這兩個分辨率爲1280x720和1920x1080
  • 距離較小的電路板爲500mm至較大的電路板爲2000mm

在任何情況下我都遵循嚴格的準則按照該鏈接How to verify the correctness of calibration of a webcam?

在上述因素的所有組合,我得到的是一個幾毫米斷結果(+ - 15毫米) 我的內在在1280×72025毫米塊用於上述方法的跨越如下:

  • OpenCV的內置的校準方法> FX = 1269.4 FY = 1269.49 CX = 639.5 CY = 359.5
  • Matlab的標定工具箱> FX = 1259.53 FY = 1260.76 CX = 661.3 CY = 306.5
  • Matlab校準App> fx = 1255.1 fy = 1254.8 cx = 652.6 cy = 340.7
  • 手動調整值。 >各種結果,除cx = 639.5外無穩定cy = 359.5

這不應該是這樣。攝像頭相對於電路板原點的位置應精確到平均一毫米或兩毫米,如果在處理1米以下的距離時不是亞毫米精度。除非我錯了?

我的問題是,什麼是一個理想的,簡單的校準方法,對於高清攝像頭,幾乎沒有失真?

+0

openCVs和Matlabs的校準方法是相同的,據我所知... – 2014-12-02 19:06:59

+3

我不知道如何解釋您的聲明[「在任何情況下,我遵循嚴格的指導方針...」 (http://stackoverflow.com/questions/12794876/how-to-verify-the-correctness-of-calibration-of-a-webcam/12821056#12821056) - 因爲如果我按照鏈接,在#4我讀:*「需要大量的測量和圖片,每張圖片和數十張圖片需要數百個測量值(角點),數據的關注點越多越好,10x10棋盤格是我考慮的絕對最小值。在20x20。「* - 但你正在使用9x6板? – Schorsch 2014-12-02 19:30:06

+1

這是真的。我的項目是確定距離約3米的精度。使用較小的塊變得更難以檢測,並且使用10x10在檢測180度旋轉時出現錯誤。我還讀了幾個源文件(其中一個是在stackoverflow中,找不到),說明沒有必要有這麼多的圖像。我發現我的重投影錯誤隨着更多圖像而增加。拒絕高錯誤後,我留下了20張圖片。 – Grim 2014-12-02 20:07:42

回答

9

有許多可能的錯誤來源。

首先,雖然您嘗試過的所有三種校準實現都使用基本相同的算法,但是存在足夠的差異來解釋結果中的差異。

主要區別在於棋盤角落檢測。 Caltech校準工具箱不具有自動棋盤檢測功能,並使用第二個優化通道來優化角點。OpenCV和Camera Calibrator App都會自動檢測棋盤格,但Camera Calibrator App中使用的算法要好得多。它更加穩健,這意味着當OpenCV沒有時可能會檢測到一個電路板,並且其子像素定位更加精確。我的觀點是,在這三種方法中,您使用不同的數據點進行校準。所以你的結果不一樣就不足爲奇了。

一旦校準,你得到什麼樣的重投影的錯誤? Camera Calibrator應用程序向您顯示再投影錯誤的條形圖。你應該看看它,並排除給你高錯誤的圖像。理想情況下,您希望平均重投影誤差小於半個像素。越低越好。

現在我要問你,你是如何測量從相機到棋盤的距離?你是從校準獲得外部參數表示從棋盤的座標系統轉換到相機的座標系統,其原產地是攝像頭的情況下,在其光學中心。這很難準確衡量。更好的方法是place a flat object of a known size on the checkerboard and measure it using the camera。實際上,您可以測量檢測到的棋盤角之間的距離。請注意,檢測精度是另一個錯誤來源。

另一件事情,請一定不要你的校正圖像保存爲JPEG格式。壓縮僞影將影響棋盤角落檢測的準確性。使用像tiff或png這樣的無損格式。

+0

謝謝你的回答。我知道結果會有所不同,只是期望他們更加相似。對於matlab App和Caltec的工具箱,我的重投影誤差都在0.199以下。這兩者都是在拒絕高誤差圖像之後。 – Grim 2014-12-02 20:12:24

+0

你的jpeg信息很有趣。我將jpeg用於caltec的工具箱,但是將png用於OpenCV和Matlab的應用程序。我會嘗試TIFF並取得成果。 – Grim 2014-12-02 20:14:54

+0

0.199聽起來不錯...你的+/- 15mm錯誤怎麼樣?你如何衡量? – Dima 2014-12-02 20:15:24

3

來到這個黨一點點晚,但如果它可以幫助...

的差異並不使人感到意外,因爲這三個應用程序,但主要是依靠相同的算法(和,爲的OpenCV和Matlab工具包,甚至共享作者),具有不同的性能不同的實現。如果您有興趣創建一個公平的比較,你至少應該與同一組測量結果(即檢測到的角落的位置,與子像素細化)駕駛他們,使輸出的任何差異純粹是由於實現。已經正確地指出,通過使用不同的圖像格式,您可以有效地使用不同的測量集。

您在主點觀察到的變化也不足爲奇:它是相當難以準確估計,因爲

  • 的投影誤差不是它的位置非常敏感,即你正在嘗試的成本函數優化是在大多是「平坦」(CX,CY)周圍的最佳子空間(參見this paper深入的討論),和
  • 它在本質上是相混淆的非線性失真的中心和由該組件平行於圖像世界對相機翻譯的飛機。

後一點意味着小,難以檢測在主點的變化將導致顯著3D位置誤差除非附加約束添加,使受約束的誤差函數不是平坦的關於感興趣quantitities即攝像機相對於校準裝置的絕對位置和方向。

方便約束添加有:

  • 用於校準目標和照相機的相對運動的現有模型。例如,如果您的棋盤目標已連接到轉盤,則可以針對其運動的中心和軸(3 + 2個參數)進行優化,而不是針對各個目標位置姿態的6 x num_images參數。
  • 相對於非平面固定鑽機(或鑽機相關的點和方向,如上所述)的多個攝像機位置。
相關問題