单应?在某些视图中处理丢失的棋盘角的 OpenCV 方法?

Homography? OpenCV method to handle missing chessboard corners in some views?

我刚刚安装了 OpenCV 3.2.0,我可以在 this image from by playing around with the contrast then using cv2.findChessboardCorners(left_gray, (6,5)) or by using cv2.goodFeaturesToTrack(gray_img,25,0.01,10) as described in 中找到 many/most 个角。

虽然 findChessboardCorners returns 全部 6×5=30 个或 None,但我可以看到,对于较低质量的图像,有时并非所有点都会被找到 使用 goodFeaturesToTrack 方法

但是当我阅读 documentation for cv2.calibrateCamera() 时,看起来对象点需要与每个视图的图像点一一对应。如果其中一张图像有缺失点,我必须找到它并将其从该图像的对象点列表中删除。

有没有一些cv2方法可以自动处理这个?

编辑: 我现在想知道,cv2.findHomography() 是否使用了我在这里寻找的一种可靠方法?

当然,如果外部的行或列全部丢失,则存在无法解决的歧义,但如果缺少一些内部点,则仍然可以进行校准。

我可能会尝试写一些东西,当然只是拒绝任何发现角点数量错误的视图,但如果已经有一种现有的方法来处理不会导致歧义的缺失点,我会喜欢先试试看。目标是尽可能自动化该过程,而不会跳过每张发现点数量错误的图像。

您可以通过稍微改变正在使用的模式来解决这个问题。您在这里需要的是指定缺少哪些角。 OpenCV 有一个简单的解决方案:ChArUco 板。下面我附上了该模式使用的教程。

http://docs.opencv.org/3.1.0/df/d4a/tutorial_charuco_detection.html

使用 charuco,您可以指定自动检测哪些角。然后就可以调整物点进行标定了。

如果您正在使用 python,您需要 aruco 库的包装器:

https://github.com/opencv/opencv_contrib/pull/554/

https://github.com/fehlfarbe/python-aruco/

以及在 python 中使用 charuco 的一些答案:

http://answers.opencv.org/question/98447/camera-calibration-using-charuco-and-python/?answer=98451#post-id-98451/


简单来说,从linked tutorial开始,过程如下:

要定义一个CharucoBoard,需要使用定义生成图案,然后指定对检测算法的描述:

  • X方向棋盘格数。
  • Y方向棋盘格数。
  • 方边的长度。
  • 标记边的长度。
  • 标记字典。
  • 所有标记的 ID。