【问题标题】:Camera calibration at image corners图像角落的相机校准
【发布时间】:2020-10-13 04:02:32
【问题描述】:

我正在使用 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)

【问题讨论】:

  • 如果你没有找到知道的人,你仍然可以查看opencv代码(它是开源的),也许可以根据你的需要进行调整。
  • 根据文档,当您已经进行校准时,interpilateCharucoCorners 很有用。因为使用针孔相机,您可以正确插入缺失的角。没有针孔摄像头,你无法正确猜测失真,所以无法插值角?!?
  • 根据这些图片,似乎希望只检测棋盘的内部(类似于一般棋盘检测):docs.opencv.org/3.4/df/d4a/tutorial_charuco_detection.html
  • 谢谢米卡。我认为外部部分也被自动丢弃。这可能是因为只接受 X 形角(90 度白色 + 90 度黑色 + 90 度白色 + 90 度黑色)。但是,如果您查看我的图像,我故意在 FOV 之外留下一列标记,希望使用内部制造商,但它没有用。
  • 我刚刚发现参数 minMarkers(必须检测到返回 charuco 角的相邻标记的数量)可以完成这项工作。 docs.opencv.org/3.4/d9/d6a/…。将其设置为零,我解决了我的问题..

标签: opencv calibration aruco


【解决方案1】:

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

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

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

这是生成的图像:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 2015-11-16
    • 2011-07-18
    • 2011-04-05
    • 2012-10-21
    • 2013-09-13
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多