Opencv 校准后不失真单点

Opencv 校准后不失真单点,opencv,calibration,Opencv,Calibration,我对使用Scaramuzza或Mei的opencv重新计算单点的不失真度有疑问 我已经在数据集上进行了校准,提取了相机矩阵和畸变系数(用于mei)以及Scaramuzza的必要参数,在获得mapx(map1)和mapy(map2)后,我想在单个点上应用不失真 对于梅: 我们在鱼眼图像中有一个点的位置(棋盘上的交点),我可以使用FindChessboardReners找到它的位置(我知道这可以用于校准,但我想知道图像中一个已知点的位置),现在我有了未失真的图像,我想知道失真校正后该点的位置, 我读

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

对于梅: 我们在鱼眼图像中有一个点的位置(棋盘上的交点),我可以使用FindChessboardReners找到它的位置(我知道这可以用于校准,但我想知道图像中一个已知点的位置),现在我有了未失真的图像,我想知道失真校正后该点的位置, 我读过很多链接,建议使用无畸变点方法,或使用重映射方法,我读过描述dst(x,y)=src(mapx(x,y),mapy(x,y))的链接,我应用了所有链接,但当我绘制结果点时,它不在棋盘的同一交点上,甚至离棋盘在鱼眼中的位置更近

对于Scaramuzza: 我试图理解world2cam和cam2world的方法,但仍然无法正确理解

所以 如果我们在畸变之前有一个点的位置,有没有一种方法可以知道畸变校正后单个点的位置?还有人能用深奥的方式解释一下mapx和mapy。。我已经阅读了关于它们的示例以及如何使用它们,但是每当我想要实现扭曲点和未扭曲点之间的映射时,我就感到困惑,例如:mapx和mapy应该具有src的大小(在我的例子中,它是一个点),那么我如何在这里使用remap方法呢?或者我应该从摄像机矩阵和失真系数中得到它们,然后使用dst(x,y)=src(map1(x,y),map2(x,y)


我在图像上成功地应用了EstimateNewCameraTrixForUndortRective、InitUndortRectiveyMap和remap(对于mei),并且我还应用了Scaramuzza在图像上实施的不失真方法,结果非常令人满意(比mei更好)

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

你可以应用失真公式或在地图中查找该像素位置ION贴图以相反的方向给出:
map1(x,y),map1(x,y)
给出源(扭曲)图像中的x,y坐标。假设您正在迭代x,y目标图像,对于每个像素,您会问:源图像中要放置在x,y中的像素在哪里?贴图会给出源图像中的x,y。(X,Y不是整数)。我可以看到,但如果我有一个点,它的位置是(50,60)(就像一个例子)我有mapx和mapy,我想知道它在未失真图像中的新位置,我如何计算它?对不起,因为map1和map2给出了相反的方向,你必须用失真/未失真公式手动计算查找矩阵。@Mika好的,非常感谢,我会尝试这样做的