采用68点
采用solvepnp,将脸模project到原图上,不是特别的准(下图中绿色为标注或者刷库出来的landmark,蓝色为3d脸模经过solvepnp得到的R、T投影得到的):
68点看也还可以:
看810张图片的68点都感觉还可以啊:
采用ransac,将脸模project到原图上,经常性地更大的误差:
从68点投影看,主要是脸小了一圈,会导致距离计算不准:
即使将ransac的参数也改为cv2.SOLVEPNP_ITERATIVE,照样不准:
采用6点
采用solvepnp,将脸模project到原图上,效果要好很多:
但其实从68点的复原看,效果不行:
感觉像是这个角度了:
810张图片只有1张出现异常,其他的都基本吻合:
采用ransac,将脸模project到原图上,也比68点的好,从6点看比solvepnp的差:
但看68点好一些:
ransac还是会出现下面这种:
再例如:
耗时
采用68点solve pnp的时间(0.45ms)大约是6点solvepnp(0.32ms)的1.4倍
采用68点solve pnpRansac的时间(3.6ms)大约是6点solvepnpRansac(0.6ms)的6倍
结论
1、采用68点的风险在于人脸yaw比较大时,不可见的一侧脸的标注一般与实际脸模不符,可能导致偏差交大
2、从整体效果看,solvepnp比solvepnpRansac要好
3、建议采用68点的solvepnp,刷完之后要project过来,逐个结果地校验