书本变形模型上的透视投影问题总结

0.前言

目前已经进行到了逆映射阶段,写完了求解逆映射的代码之后发现,得出来的世界坐标点完全不对,但是对于一元三次方的求解以及逆映射的公式,经过验证推导并无问题。所以找寻问题的答案。

1 问题的可能性原因

1)逆映射的公式

经过验证,逆映射的公式没有问题,也就是一元三次方的求解也没有问题

2)计算dx,dy,dz,ox,oy,oz出错

也不是这个原因

3)计算的的x,y,z有错

因为在求逆映射的过程中,主要用到了dx,dy,dz的值,而这个值来自于Dw=R^T(u,v,f)^T,所以只能是u,v的问题。而u,v的话来自于世界坐标点经过透视投影而来,所以问题就出在世界坐标点上。

2 分析原因

仔细想想,从6月份开始到现在,做的最多的工作就是拟合书本模型,找到系数的范围,利用定积分求得对应的x值。

这些工作完成了之后,透视投影变换是之前的代码,没有做更多的修改。生成样本,训练网络也没有修改。

然后就是逆映射部分做了一元三次方的求解和确定方程组,如何求得世界坐标的工作。

也就是总共的工作分为了三部分:

1)求书本模型的系数范围以及世界坐标点

2)进行透视投影,生成样本,训练网络

3)测试网络,进行逆映射,反向求得世界坐标点

可以确定的是,后两部分工作没有问题。问题只能出现在第一部分。

回头想想,第一部分的工作最关键的是求得了系数的范围,通过大量的观察和总结。然后在这个基础上进行定积分求解x坐标,然后通过多项式公式(系数是在求得的系数范围中随机选取的)求得z的值。

那么其实,这个书本模型的系数范围是在什么情况下确定的呢?是在x位于0到1的范围下找到的规律。

所以呢,在求定积分的时候,x坐标也是从0到1的。在求得这样的x之后,利用多项式

Z_XFun = lambda x: a3*x**3 + a2*x**2 + a1*x**1 + a0

求得了z的值。

然后关键的一步来了,对x进行了-190到190的映射

for x in posXLst:        
        posX.append((x-0.5)*380)

在这个地方,问题就开始出现了。

没有相应的z进行映射。

也不知道当时怎么想的,满脑子都是符合的曲线。因为如果用映射后的x求得z的值的话,这个曲线完全不符合要求。

所以,当时找了一个符合曲线的z值,那就是用0到1的x求得的z值。


然后用这个z值与x值进行透视变换以及接下来的所有,到了逆映射阶段,我就发现不行了,出问题了!

3 解决方案

对z值也进行相应的映射。当然是用0到1的x计算得到的z值。

经过验证,这个曲线也符合要求。

那么,接下来要做的就是,用这个坐标,重新生成样本,进行逆映射,

可以先生成几个,然后测试一下逆映射的正确与否,如果任然不对,那就继续找寻问题所在!

4 验证是否解决

没有解决。问题的原因就是这个。求逆映射的公式中,带入了z=a3*x^3+a2*x^2+a1*x+a0,所以,x和z必须满足这个关系。然后对z进行和x一样的映射之后,x和z的关系并不成立,所以无法这么计算。

那到底该怎么做呢?


猜你喜欢

转载自blog.csdn.net/qq_35546153/article/details/80831394