【问题标题】:Undistort single point after calibration校准后单点不失真
【发布时间】:2020-06-23 22:29:43
【问题描述】:

我对使用 Scaramuzza 或 Mei 的 opencv 对单点的不失真进行重新分级有疑问 我已经对数据集进行了校准,并提取了相机矩阵和失真系数(对于 mei)以及 Scaramuzza 的必要参数,在得到 mapx(map1)和 mapy(map2)之后,我想在单个点上应用不失真。

为梅:

我们在鱼眼图像中有一个点(棋盘中的交叉点)的位置,我能够使用 findchessboardcoreners 找到它的位置(我知道这可以用于校准,但我想知道一个位置图像中众所周知的点),现在我有未失真的图像,我想知道失真校正后该点的位置, 我已经阅读了很多链接,建议使用 undistortpoints 方法,或者使用 remap 方法,并且我阅读了描述 dst(x,y)=src(mapx(x,y),mapy(x,y)) 的链接并且我申请了除了我画出结果点时,它们都不是在棋盘的同一个交点上,它甚至在棋盘之外更接近鱼眼中的位置

对于斯卡拉穆扎:

我试图了解 world2cam 和 cam2world 方法,但我仍然无法正确理解

所以

如果我们有畸变前的位置,有没有一种方法可以知道畸变校正后的单个点的位置?也有人可以深入解释 mapx 和 mapy .. 我已经阅读了有关它们的示例以及如何使用它们,但是每当我想实现失真点和未失真点之间的映射时,我都会感到困惑,例如:mapx 和 mapy应该有 src 的大小(在我的情况下它是一个点)所以我如何在这里使用 remap 方法?或者我应该让它们形成相机矩阵和失真系数并使用 dst(x,y)=src(map1(x,y),map2(x,y) ?

注意 我已经成功地在图像上应用了estimateNewCameraMatrixForUndistortRectify、initUndistortRectifyMap 和重映射(对于梅的),我还应用了由 Scaramuzza 实现的不失真方法,结果非常令人满意(比梅更好)

【问题讨论】:

  • 您可以应用失真公式或在地图中查找该像素位置
  • 地图以相反的方向给出:map1(x,y), map1(x,y) 给出源(失真)图像中的 X、Y 坐标。假设您正在迭代 x,y 目标图像,并且对于您询问的每个像素:源图像中要放置在 x,y 中的像素在哪里?地图为您提供源图像中的 X、Y。 (X,Y 不是整数)。
  • 好的,我可以看到,但是如果我有一个点并且它的位置是 (50,60)(仅作为示例)并且我有 mapx 和 mapy,我想知道它在未失真的图像,我该如何计算?
  • 抱歉,由于 map1 和 map2 给出了相反的方向,您必须使用失真/不失真公式手动计算查找矩阵。
  • @Micka 好的,非常感谢,我会努力做到的

标签: opencv calibration


【解决方案1】:

我能够通过 undistortpoints openCV 函数解决它,问题是我没有使用 fisheye::undistortPoints 但我使用的是原来的,仍然被包围的点不在正确的位置,但结果有点可以接受

【讨论】:

    猜你喜欢
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    相关资源
    最近更新 更多