2016-02-03 85 views
2

我一直試圖讓OpenCV相機校準工作幾個月,但目前爲止我一直未能成功。我處於可以獲得低重新投影誤差(低於0.5像素)的點,但是當我檢查由stereoRectify輸出的圖像時,它們顯然未被正確校正。相應的點不水平對齊。整流的顯着效果是稍微旋轉一張圖像並放大其他圖像。由整流產生的視差圖很嘈雜,並且不正確(同時使用StereoSGBM和StereoVar)。OpenCV立體聲校準重新投影誤差較低,但不正確

我試過使用幾組不同的校準圖像,範圍從20到80幀。我嘗試過棋盤大小,距離和旋轉的各種組合,都無濟於事。在每種情況下,我都會得到不同的結果,但都是上面描述的無用視差圖的類型。

MATLAB立體聲校準產生的在同樣的視頻效果更好,但不幸的是,MATLAB不能作爲我的情況下的長期解決方案。 我不明白爲什麼OpenCV認爲它找到一個很好的立體聲整流時,它顯然不是。我是否錯過了如何校準相機?有沒有其他人遇到過這樣的問題?

回答

2

鑑於它在MATLAB中工作,我假設你的立體相機設置正確,這意味着它們是完全固定的。 我想到的是:您是否單獨校準相機?所以你可以使用cameraRectify中的相機矩陣和失真係數。 另外,我指出findChessboardCorners在圖像質量較低時表現不佳。但是這應該導致很高的RMS誤差。在任何情況下,您不僅應該擁有相當高數量的圖片(我使用了100),而且校準板在相機上也有不同的角度。並且電路板與相機的距離不應該太高,以便電路板覆蓋大部分圖像。 (因爲兩個相機都需要完全可見,所以我使用預覽來調整位置。)這些都不能真正回答您的問題,但我希望它有幫助。

+0

我沒有單獨校準照相機,但是由於將此添加到我的代碼中,我只遇到了更多問題,主要是縮放和裁剪是stereoRectify的唯一顯着效果。感謝您的建議,但它不認爲工作。 :( – KFox

0

您是否在MATLAB和OpenCV中使用相同的圖像進行校準?此外,你在MATLAB中使用Stereo Camera Calibrator app

如果您使用完全相同的校準圖像,那麼您所看到的可能解釋是,MATLAB中的棋盤檢測器比OpenCV中的棋盤檢測器更精確。

如果您使用的是不同的校準圖像,那麼我會嘗試使用undistort函數對OpenCV中的圖像進行不失真矯正,而不是糾正它們。很有可能這些未失真的圖像看起來會扭曲並摺疊起來。再加上較低的重投影誤差,表明您無法對鏡頭失真做出較好的估計。通常情況下,當您的棋盤大部分位於圖像中間時,會發生這種情況,並且您沒有找到靠近邊緣的點。這裏的補救措施是讓棋盤靠近圖像的邊緣和角落,以獲得更多圖像。

+0

我沒有在MATLAB中使用該應用程序,是的,我使用的是相同的圖像。我不完全確定你在暗示我做什麼......我已經在使用OpenCV的stereoRectify來做不失真的事情, – KFox

+0

我已經編輯了答案,我建議使用'undistort'函數來解開圖像而不是糾正它們,這可能會使問題更加明顯,如果你不使用MATLAB應用程序,你是什麼用MATLAB來校準? – Dima

+0

感謝您的幫助,但我發現問題與視頻壓縮有關。在嘗試了幾種視頻格式後,我發現HFYU正在使某些原因發生作用! – KFox