图像角落的相机校准

Camera calibration at image corners

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

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

虽然我得到的结果让我有点困惑。 interpolateCharucoCorners 函数,永远不会 returns me 最后的 row/column 棋盘,使得无法使用图像的那些区域进行校准。

为了给你一个想法,我附上了下图,其中我突出显示了由 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)

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

MinMarkers:必须检测到 return 个 charuco 角的相邻标记数。

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

这是生成的图像: