OpenCV中undistortPoints()和projectPoints()之间的区别

时间:2017-02-21 08:17:40

标签: opencv camera-calibration

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

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

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

1 个答案:

答案 0 :(得分:1)

引用projectPoints()的3.2文档:

  

投影3D指向图像平面。

     

该函数计算   给定内部和外部的3D投影指向图像平面   外在相机参数。

您有参数distCoeffs

  

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

没有任何扭曲的等式是:

projection

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

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

  

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

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

使用外在矩阵,您可以获得相机框中的点:

enter image description here

通过除以深度获得标准化相机帧:

enter image description here

假设没有失真,图像点为:

enter image description here

假设没有失真的“反向转换”:

enter image description here