个人觉得在目前Epnp算法已经被集成到OpenCV中库函数里面,就没必要再去手动将公式都推到一遍,因此求解的细节不需要死记,我们只要知道每一步是在干什么就可以了。除非你要研究和改进算法本身,那就直接去阅读原论文是最好的。
其实EPNP最重要的不是某个东西怎么求解,而是为什么要求解某个东西。学过SLAM14讲的人应该知道,求解2D-3D的匹配问题主要基于PNP算法,求解PnP算法的主要方式大致是直接线性变换(DLT),P3P,EPnP,UPnP以及非线性优化方法。
EPnP算法的流程为:
1)先选择控制点,根据3D-2D匹配对中的3D点和控制点,算出α;
2)然后根据这个α和3D-2D匹配对中的2D点,算出控制点在相机坐标系下的3D坐标;
3)最后根据3D坐标,和之前的2D-3D匹配对内的3D坐标,构建3D-3D的求解问题,用ICP来求解。
流程的详细讲述见下面的链接:
古月居-微鉴道长
理解完流程之后,可以参考下面链接对EPnP算法进行更加深入的理解
深入EPnPS算法