首页 > 解决方案 > 图像角落的相机校准

问题描述

我正在使用 OpenCV 并正在校准相机,这是第一次测试 charuco 型校准器。

我对这个校准器有很多期望,认为使用它我可以比使用标准棋盘更接近图像的角落,因为不需要完全看到 charuco。这在理论上应该有助于投影系统的建模,因为角落的光学变形更大。

我得到的结果让我有点困惑。该interpolateCharucoCorners函数从不返回棋盘的最后一行/列,因此无法使用图像的这些区域进行校准。

只是为了给你一个想法,我附上了下图,其中我突出显示了由提取的点描述的interpolateCharucoCorners区域(该区域是整个点集的凸包)。

查鲁科板:

Charuco 板

如您所见,标记右侧的最后一列尚未提取。你能帮我解释一下为什么吗?如何在校准中包含这些像素?ChArUco 角提取如下。

这是我的代码,但它与示例中的相同:

image_grayscale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
corners, ids, rejected_points = cv2.aruco.detectMarkers(image_grayscale, board.dictionary)
_, charuco_corners, charuco_ids = cv2.aruco.interpolateCornersCharuco(corners, ids, image_grayscale, board)

标签: opencvcalibrationaruco

解决方案


我终于找到了解决方案。可以通过设置参数来提取边缘附近的minMarkers = 0标记interpolateCornersChaurco。来自文档:

MinMarkers:必须检测到返回 charuco 角的相邻标记的数量。

https://docs.opencv.org/3.4/d9/d6a/group__aruco.html#gadcc5dc30c9ad33dcf839e84e8638dcd1

这是生成的图像:

在此处输入图像描述


推荐阅读