是否有任何opencv函数来计算重投影点?

Posted

技术标签:

【中文标题】是否有任何opencv函数来计算重投影点?【英文标题】:Is there any opencv function to calculate reprojected points? 【发布时间】:2016-06-06 06:08:56 【问题描述】:

根据给定的世界点(原始坐标)、内在矩阵、旋转矩阵和平移向量计算重投影点、重投影误差和平均重投影误差的过程是什么?

有没有内置的opencv函数或者我们应该手动计算?

如果我们必须手动计算,获得重投影点的最佳方法是什么?

【问题讨论】:

【参考方案1】:

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

calibrateCamera 返回最终的重投影错误。 calibrateCamera 从校准模式的多个视图中找到相机的内在和外在参数。

该函数估计相机的内在参数和外在参数 每个视图的参数。该算法基于 [Zhang2000]1 和 [BouguetMCT]2。 3D对象点的坐标和 必须指定它们在每个视图中对应的 2D 投影。 这可以通过使用具有已知几何形状的对象和 易于检测的特征点。这样的对象称为 校准装置或校准模式,OpenCV 内置 支持将棋盘作为校准装置(参见 findChessboardCorners())。

算法执行以下步骤:

    计算初始内在参数(该选项仅可用 用于平面校准模式)或从输入中读取它们 参数。失真系数最初都设置为零 除非指定了一些CV_CALIB_FIX_K?

    估计初始值 相机姿势,就好像内在参数已经知道一样。 这是使用solvePnP() 完成的。

    运行全局 Levenberg-Marquardt 最小化重投影误差的优化算法,即 观察到的特征点之间的平方距离总和 imagePoints 和预计(使用相机的当前估计 参数和姿势)对象点objectPoints。看 projectPoints() 了解详情。函数返回最终结果 重投影错误。

1张正友。一种灵活的相机校准新技术。 模式分析和机器智能,IEEE Transactions on,2000 年,22.11:1330-1334。

2J.Y.布格。 MATLAB 校准工具。 http://www.vision.caltech.edu/bouguetj/calib_doc/

【讨论】:

我不知道如何使用calibrateCamera计算重投影误差,你能解释一下吗?

以上是关于是否有任何opencv函数来计算重投影点?的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何 C++ opencv 代码来计算每帧视频中关键特征点的速度? [关闭]

opencvprojectPoints 三维点到二维点 重投影误差计算

使用 OpenCV cvStereoCalibrate 校准一对不同分辨率的相机时出现大的重投影误差

使用Python,Open3D对点云散点投影到面上并可视化,使用3种方法计算面的法向量及与平均法向量的夹角

重映射

OpenCV 立体匹配