【问题标题】:Undistorting/rectify images with OpenCV使用 OpenCV 去失真/校正图像
【发布时间】:2013-12-29 08:35:52
【问题描述】:

我以本书中用于校准相机和不失真图像的代码示例:shop.oreilly.com/product/9780596516130.do

据我了解,OpenCV 的常用相机校准方法非常适用于“普通”相机。 当涉及到鱼眼镜头时,虽然我们必须使用 8 个校准参数而不是 5 个向量以及方法 cvCalibrateCamera2 中的标志 CV_CALIB_RATIONAL_MODEL。 至少,OpenCV documentary 中是这么说的

所以,当我在像这样 (Sample images from OCamCalib) 的图像数组上使用它时,我使用 cvInitUndistortMap 得到以下结果:abload.de/img/rastere4u2w.jpg

由于生成的图像是从整个未失真的图像中剪下的,我继续使用cvInitUndistortRectifyMap(就像这里描述的stackoverflow.com/questions/8837478/opencv-cvremap-cropping-image)。于是我得到了以下结果:abload.de/img/rasterxisps.jpg

现在我的问题是:为什么整个图像没有失真?在我后来结果的一些照片中,您可以识别出例如笔记本电脑仍然完全失真。如何使用标准 OpenCV 方法获得更好的结果?

我是 stackoverflow 的新手,我也是 OpenCV 的新手,所以在表达我的问题时,请原谅我的任何不足之处。

【问题讨论】:

  • 抱歉我的问题中的链接,但因为我是 stackoverflow 的新手,所以我最多只能使用 2 个链接。
  • 我在不失真和校准方面没有太多经验(尽管我经常使用它),但问题可能是您的棋盘图案仅覆盖图像的(小)部分(总的来说图像),因此您的校准和不失真仅适用于图像的该部分。
  • 想起一些前同事的一个项目,我找到了他们的简报,提到常见的校准技术可能不适用于极端鱼眼相机。但是这篇论文是 2008 年的,所以不知道 openCV 是否已经使用了“更好”的技术:lfb.rwth-aachen.de/bibtexupload/pdf/STE08b.pdf
  • 感谢您的回复,我认为@Micka 是对的,因为我的图像无法找到棋盘图案。现在我想知道如何做到这一点以进一步改善结果。
  • abload.de/img/cvfindchessboardcornezoa5z.png 有谁知道为什么最后两张图片找不到棋盘?我知道它非常扭曲,但方块仍然清晰可见。我可以用标志或任何东西改进 OpenCV 方法吗?

标签: opencv camera camera-calibration fisheye


【解决方案1】:
  1. 所有棋盘角都应该是可见的。该算法需要一定大小的棋盘,例如 4x3 或 7x6(例如)。棋盘周围的白色边框也应该可见,否则可能无法精确定义深色方块。

  2. 在 undistort() 之后,图像外围仍然存在高失真,因为失真是径向的(即它们随半径增加)并且您找到的系数是错误的。后者是错误的,因为校准过程使像素坐标中的平方误差之和最小化,并且您没有用足够的样本表示外围。

TODO:如果使用 8 个 distCoeff,则必须有 20-40 个棋盘图案图像。以不同的角度倾斜你的木板,把它们放在不同的距离,然后把它们散开,尤其是在外围。请记住,校准的成功取决于采样以及从您的棋盘上清楚地看到vanishing points(因此 slanting and tilting).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多