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



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

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

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

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

CCD_ 2返回最终的重新投影误差。CCD_ 3从校准模式的几个视图中找到相机的内在参数和外在参数。

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

该算法执行以下步骤:

  1. 计算初始内部参数(选项仅可用用于平面校准图案)或从输入中读取它们参数。失真系数最初全部设置为零除非指定了CCD_ 5中的一些。

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

  3. 运行全球Levenberg-Marquardt优化算法以最小化重投影误差,观测到的特征点之间的平方距离的总和imagePoints和投影(使用相机的当前估计参数和姿态)对象点CCD_ 8。看见projectPoints()了解详细信息。函数返回最终重新投影错误。

1张,郑友。一种灵活的相机校准新技术模式分析与机器智能,IEEE汇刊,2000,22.11:1330-1334。

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

基于张的校准纸从openCV中校准Camera()就是您所需要的https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr98-71.pdf

为了简洁起见,我不能在这里解释数学。

以下是程序的简短摘要:

  1. 获取同一参考对象的多个视图,例如棋盘
  2. 输入objectPoints、imagePoints和其他参数,您将获得失真系数、3x3相机固有矩阵、旋转矢量和平移矢量
  3. 在校准了固有相机矩阵的情况下,您可以使用函数cv.projectPoints来计算重新投影的点,该函数将3D点投影到2D成像平面

您需要opencv,但为了简单起见,您可以使用opencv的Python版本来做同样的事情,但代价是性能

https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#ga687a1ab946686f0d85ae0363b5af1d7b

祝你好运!

相关内容

  • 没有找到相关文章

最新更新