【问题标题】:Difference between undistortPoints() and projectPoints() in OpenCVOpenCV 中 undistortPoints() 和 projectPoints() 的区别
【发布时间】:2017-02-21 20:59:41
【问题描述】:

据我了解,undistortPoints 会在失真图像上获取一组点,并计算它们的坐标在同一图像的未失真版本上的位置。同样,projectPoints 将一组对象坐标映射到它们对应的图像坐标。

但是,我不确定 projectPoints 是否将对象坐标映射到失真图像(即原始图像)或未失真图像(直线)上的一组图像点?

此外,undistortPoints 的 OpenCV 文档指出 '该函数执行对 projectPoints()'的反向转换'。你能解释一下这是怎么回事吗?

【问题讨论】:

    标签: opencv camera-calibration


    【解决方案1】:

    引用projectPoints() 的 3.2 文档:

    将 3D 点投影到图像平面。

    函数计算 给定固有和 3D 点到图像平面的投影 外部相机参数。

    你有参数distCoeffs:

    如果向量为空,则假设失真系数为零。

    没有失真的方程是:

    K 是内在矩阵,[R | t] 是外在矩阵或将对象或世界框架中的点转换为相机框架的变换。


    对于undistortPoints(),你有参数R:

    对象空间中的校正变换(3x3 矩阵)。由 cv::stereoRectify 计算的 R1 或 R2 可以在这里传递。如果矩阵为空,则使用恒等变换。

    反向变换是您使用内部参数为 2D 图像点 ([u, v]) 计算归一化相机帧 ([x, y, z=1]) 中对应的 3D 点的操作。

    利用外在矩阵,可以得到相机帧中的点:

    除以深度得到归一化的相机帧:

    假设不失真,图像点为:

    以及假设没有失真的“逆变换”:

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 1970-01-01
      • 2015-10-25
      • 2013-02-28
      • 2021-07-19
      • 2012-01-25
      • 2010-10-19
      • 2021-03-02
      • 2015-10-04
      相关资源
      最近更新 更多