单应性?在某些视图中处理丢失棋盘角的 OpenCV 方法?
Posted
技术标签:
【中文标题】单应性?在某些视图中处理丢失棋盘角的 OpenCV 方法?【英文标题】:Homography? OpenCV method to handle missing chessboard corners in some views? 【发布时间】:2017-08-20 14:14:50 【问题描述】:我刚刚安装了 OpenCV 3.2.0,我可以在this question 中找到this image 中的许多/大部分角落,方法是使用对比度然后使用cv2.findChessboardCorners(left_gray, (6,5))
或使用cv2.goodFeaturesToTrack(gray_img,25,0.01,10)
,如@ 中所述987654323@.
虽然 findChessboardCorners 要么返回全部 6×5=30 个或 None
,但我可以看到,对于质量较低的图像,有时并非所有点都可以找到 goodFeaturesToTrack
方法。
但是当我阅读documentation for cv2.calibrateCamera()
时,看起来对象点需要与每个视图的图像点一一对应。如果其中一个图像有缺失点,我必须找到它并将其从该图像的对象点列表中删除。
是否有一些 cv2 方法可以自动处理这个问题?
编辑:我现在想知道,cv2.findHomography()
是否使用了我在这里寻找的稳健方法之一?
当然,如果外部行或列全部丢失,则存在无法解决的歧义,但如果缺少一些内部点,则仍然可以进行校准。
我可能会尝试写一些东西,当然只是拒绝任何发现角数错误的视图,但是如果已经有一种现有的方法来处理不引起歧义的缺失点,我想尝试首先它。目标是尽可能地自动化该过程,而不会跳过每个找到的点数错误的图像。
【问题讨论】:
@LamarLatrell 你能帮我澄清一下我对 OpenCV 的理解吗? :-) 【参考方案1】:您可以通过稍微改变正在使用的模式来解决这个问题。您需要在这里指定缺少哪些角。 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。【讨论】:
好吧,这不是我想的那种事情,但它确实似乎是解决“缺角”问题的方法。这个周末我去试试,谢谢你的帮助!! 我试图使用这种方法来创建像 OP 这样的单应性,但它是镜像的! id 被正确绘制,但来自单应性的 warpPerspective 的结果被翻转。你知道是什么原因造成的吗?以上是关于单应性?在某些视图中处理丢失棋盘角的 OpenCV 方法?的主要内容,如果未能解决你的问题,请参考以下文章