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

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

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

最佳答案

从3.2文档引用 projectPoints() :



您有参数distCoeffs:



在不失真的情况下,等式为:

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

使用K固有矩阵,使用[R | t]外部矩阵或将对象或世界框架中的点转换为摄影机框架的转换。

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



反向变换是一种操作,您可以使用固有参数为2D图像点([u, v])计算归一化相机帧([x, y, z=1])中的相应3D点。

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

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

归一化的相机框架是通过除以深度获得的:

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

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

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

而“逆变换”假设没有失真:

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

关于opencv - OpenCV中undistortPoints()和projectPoints()之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42361959/

10-13 08:22