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

wgmfuz8q  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(150)

从给定的世界点(原始坐标)、固有矩阵、旋转矩阵和平移向量计算重投影点、重投影误差和平均重投影误差的过程是什么?
是否有任何内置的opencv函数,或者我们应该计算手动?
如果我们必须手动计算,得到重投影点的最佳方法是什么?

lx0bsm1f

lx0bsm1f1#

projectPoints将3D点投影到图像平面。
calibrateCamera返回最终的重新投影误差。calibrateCamera从校准图案的几个视图中找到相机的内部和外部参数。
该函数估计每个视图的内部相机参数和外部参数。该算法基于[Zhang 2000]1和[BouguetMCT] 2.必须指定每个视图中的3D对象点及其相应的2D投影的坐标。这可以通过使用具有已知几何形状和容易检测的特征点的对象来实现。这样的对象称为校准架或OpenCV内置了对棋盘的支持,可将棋盘用作校准平台(参见findChessboardCorners())。
算法执行以下步骤:
1.计算初始内部参数(该选项仅适用于平面校准图案)或从输入参数中读取。除非指定了CV_CALIB_FIX_K?中的某些参数,否则失真系数最初均设置为零。
1.估计相机的初始姿态,就像内部参数已经知道一样。这是使用solvePnP()完成的。
1.运行全局Levenberg-Marquardt优化算法以最小化重投影误差,即观察到的特征点imagePoints和投影(使用相机参数和姿态的当前估计值)对象点objectPoints之间的平方距离的总和。有关详细信息,请参见projectPoints()。该函数返回最终的重投影误差。
1张正友.一种灵活的摄像机标定新技术. * 模式分析与机器智能,IEEE学报 *,2000,22.11:1330-1334.
2J.Y.Bouguet. MATLAB校准工具. http://www.vision.caltech.edu/bouguetj/calib_doc/

p4rjhz4m

p4rjhz4m2#

基于Zhang的校准论文,来自openCV的calibrateCamera()是您需要的https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr98-71.pdf
我不能在这里解释数学,以保持这个答案简短。
以下是该过程的简短摘要:
1.获取同一参考对象的多个视图,例如棋盘
1.馈入objectPoints、imagePoints和其他参数,您将获得失真系数、3x 3相机内部矩阵、旋转向量和平移向量。
1.校准了内部相机矩阵后,您将能够使用函数cv.projectPoints计算重新投影的点,该函数将3D点投影到2D成像平面
为此,您需要使用opencv,但为了简单起见,您可以使用Python版本的opencv来执行相同的操作,但会牺牲性能
https://docs.opencv.org/4.x/d9/d0c/group__calib3d.html#ga687a1ab946686f0d85ae0363b5af1d7b
祝你好运!

相关问题