根据我的理解,undistortPoints在扭曲的图像上获取一组点,并计算它们的坐标在同一图像的未失真版本上的位置。同样,projectPoints将一组对象坐标映射到它们对应的图像坐标。
但是,我不确定projectPoints是否将对象坐标映射到失真图像上的一组图像点(即原始图像)或未失真的图像点(直线)?
此外,undistortPoints的OpenCV文档指出'该函数执行对projectPoints()' 的反向转换。你能解释一下这是怎么回事吗?
答案 0 :(得分:1)
引用projectPoints()
的3.2文档:
投影3D指向图像平面。
该函数计算 给定内部和外部的3D投影指向图像平面 外在相机参数。
您有参数distCoeffs
:
如果向量为空,则假定零失真系数。
没有任何扭曲的等式是:
使用K
内在矩阵和[R | t]
外在矩阵或将对象或世界框架中的点转换为相机框架的转换。
对于undistortPoints()
,您有参数R:
对象空间中的整流变换(3x3矩阵)。由cv :: stereoRectify计算的R1或R2可以在这里传递。如果矩阵为空,则使用身份转换。
逆向变换是使用内部参数计算标准化相机帧([u, v]
)中相应3D点的2D图像点([x, y, z=1]
)的操作。
使用外在矩阵,您可以获得相机框中的点:
通过除以深度获得标准化相机帧:
假设没有失真,图像点为:
假设没有失真的“反向转换”: