0.前言
前一篇博文讲述了逆映射的原理以及先钱错误的原因,在这之后进行了缩放,最后进行了逆映射。在这个过程中,发现几个问题。
1)缩放应通过平移矩阵的tz去控制,而不是在得到坐标之后以缩放比例进行缩放。
2)在通过对坐标以一定比例进行缩放后,逆映射的结果非常差。
1.以比例缩放的逆映射结果
在以比例进行缩放,得到的逆映射结果
可以看到,整个曲线是弯曲的。
2.通过TZ进行缩放
刚开始的逆映射结果也是弯曲的。后来发现原因是对于tz的归一化发生了错误。
#label value can't in different num level, so normalized the more 1's label value; coeffLst[3] and coeffLst[4],x3 and x2;
def maxMinNormalization(num, isNormalTz):
if isNormalTz:
maxV = 161
minV = 139
return (num-minV)/(maxV-minV)
else:
maxV = 1.3
minV = -1.48
return (num-minV)/(maxV-minV)
将最大值和最小值放反了,所以得到的值是错的。
3.逆映射的原理
相当于直线方程与平面的交点。求解一元三次方程。
m= 380
n = 0.5
axCubeCoeff = a3_predict*dx/m**2
bxCubeCoeff = ((3*a3_predict*n+a2_predict)/m)*dx
cxCubeCoeff = ((3*a3_predict*n**2+2*a2_predict*n+a1_predict)*dx-dz)
dxCubeCoeff = ((n**3*m*a3_predict+n**2*m*a2_predict+n*m*a1_predict+m*a0)*dx+ox*dz-oz*dx)
x = shengjinSolution(axCubeCoeff, bxCubeCoeff, cxCubeCoeff, dxCubeCoeff)
labuda = (x-ox)/dx
y = oy + labuda*dy
z = oz + labuda*dz
4.总结
通过求得的坐标,进行了透视形变,然后进行网络训练,接着是测试网络,最后是进行逆映射。
5.下一步任务
接下来要做的就是最关键的一步,取得真实的坐标点,进行实验。