0.前言
前一篇已经完成对于网络预测结果误差的统计,这一篇主要对逆映射进行介绍并进行相应的逆映射工作。
1.逆映射资料
主要参考https://wenku.baidu.com/view/85157fab43323968001c927b.html?qq-pf-to=pcqq.discussion这篇文档。文章中说道:平行投影不受深度信息的影响;物体在摄像机坐标系中的坐标即是世界坐标系中的尺寸。最后得出公式如下:
2.代码
根据以上公式写出代码如下:
def getRTranspose(pitch, roll, heading, isRotation): R = getRotationMatrix(pitch, roll, heading, isRotation) RMatrix = np.mat(R) return RMatrix.T def perColInverseMapWorld(perColPixelPos, focalLength, pitchA, rollA, headingA, isRotation, tx, ty, tz): RTranspose = getRTranspose(pitchA, rollA, headingA, isRotation) T = getTranslationMatrix(tx, ty, tz) OW = -(RTranspose*T) ox = OW[0,0] oy = OW[1,0] oz = OW[2,0] DW = RTranspose*perColPixelPos dx = DW[0,0] dy = DW[1,0] dz = DW[2,0] return ox,oy,oz,dx,dy,dz
3.结果
随机选择样本,进网络得到预测值,将预测值与样本坐标进行逆映射,最终得到的结果图如下:
可以看出,有一定的倾斜,大概有2.5度。
4.验证逆映射公式正确性
选择特定样本及正确的角度值进逆映射公式,得到结果图如下:
可以确定, 逆映射公式无误。
5.总结
1)确定了逆映射公式及其正确性
2)预测值偏差较大,分析原因有二:一是网络预测尚未达到足够精准的地步;二是结果不佳的只是个别情况
6.下一步工作
1)提高网络准确率
2)进行测试,预测值与真实值的误差记录之,观察规律