单应?在某些视图中处理丢失的棋盘角的 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 的一些答案:
简单来说,从linked tutorial开始,过程如下:
要定义一个CharucoBoard,需要使用定义生成图案,然后指定对检测算法的描述:
- X方向棋盘格数。
- Y方向棋盘格数。
- 方边的长度。
- 标记边的长度。
- 标记字典。
- 所有标记的 ID。
我刚刚安装了 OpenCV 3.2.0,我可以在 this image from cv2.findChessboardCorners(left_gray, (6,5))
or by using cv2.goodFeaturesToTrack(gray_img,25,0.01,10)
as described in
虽然 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 的一些答案:
简单来说,从linked tutorial开始,过程如下:
要定义一个CharucoBoard,需要使用定义生成图案,然后指定对检测算法的描述:
- X方向棋盘格数。
- Y方向棋盘格数。
- 方边的长度。
- 标记边的长度。
- 标记字典。
- 所有标记的 ID。