是否有任何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 校准一对不同分辨率的相机时出现大的重投影误差