【发布时间】: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