图像角落的相机校准
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
这是生成的图像:
我正在使用 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
这是生成的图像: