簡體   English   中英

OpenCV stereo_calib 的好結果是什么?

[英]What is a good result from OpenCV stereo_calib?

我下載並構建了 OpenCV 4.1.1(使用install-opencv.sh )然后嘗試在我的相機上使用stereo_calib ,但結果一直很差; 我得到 0.6 的 RMS 誤差。 博客文章Building OpenCV Stereo Vision - Calibration說:

校准完成后,輸出 RMS 誤差。 我的 RMS 為 0.3,這對於 VGA 相機來說非常好,但可能會更好。 如果 RMS 高於 0.5,我建議您重復該過程。

為了演示一個很好的示例,我使用了samples/data - stereo_calib.xml中提供的示例數據及其列出的圖像。 stereo_calib 的結果是:

..........................13 pairs have been successfully detected.
Running stereo calibration ...
done with RMS error=0.635856
average epipolar err = 0.443478

這似乎與我從數據中得到的大致相同。 即使 RMS 誤差高於 0.5,這是一個合理的結果嗎? 那么平均極線誤差呢?

我使用結果在第一個示例圖像上運行stereo_match

stereo_match -i=intrinsics.yml -e=extrinsics.yml -o=disparity.png -p=point_cloud.txt --max-disparity=16 --blocksize=15 left01.jpg right01.jpg

由此產生的差異看起來不太好:

視差.png

但是在CloudCompare中查看 point_cloud.txt 似乎確實顯示了一個平坦的 object(棋盤),盡管效果很差。 這工作正常嗎? 或者這是一個壞例子?

視差是來自立體相機對的兩個圖像中對應點之間的距離(以像素為單位)(與距離成反比)。 快速手動估計顯示最大差異(在原始未校正圖像中)超過 130(棋盤的右上角)。

您需要有足夠大的視差搜索范圍才能獲得不錯的視差。 max-disparity的值必須高得多,至少與最大預期差異一樣大。

校准中的高 RMS 誤差通常表示校准不好,但低 RMS 誤差並不一定意味着校准良好。 如果您想快速檢查您的立體校准,為了可視化,您可以校正輸入圖像,然后在兩個圖像上繪制一些水平線。 如果校准良好,對於一張圖像中的任何點,如果可見,則在同一水平線上找到另一張圖像中的對應點(相同的y坐標,x坐標的差異就是視差)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM