请原谅我的英语不好,这不是我的母语。
我尝试解决非线性最小二乘问题。我有两套积分。 知道它们之间的对应关系,知道时间t处的一组3D点和时间t + 1处的一组2D图像点。
现在我有以下等式:
x(t+1) = ( x(t) - y(t)*rotz + z(t)*roty + tx )*f/(-x(t)*roty + y(t)*rotx+z(t)+tz)
y(t+1) = ( x(t)*rotz + y(t) - z(t)*rotx + ty )*f/(-x(t)*roty + y(t)*rotx+z(t)+tz)
变量f是focallength。我想确定rotx,roty,rotz,tx,ty,tz,以便t + 1的计算点图像点与t + 1的已知图像点之间的残差最小。
我将图像点之间的欧氏距离作为误差测量。
E = sqrt( (x(t+1) - X)^2 + (y(t+1) - Y)^2 )
X和Y是已知的2d图像点。
我计算了一个矩阵A,每个点都有一行相互依赖,并且列中有rotx,roty等的偏导数。
我还计算了一个列向量y和E的结果,用于第一次估算rotx,roty等。
现在我可以用以下方法计算变量的更新:
delta = inv(A' * A) * A' * y
(A'表示A的转置) 更新后,我使用变量进行几次迭代。
但即使我使用预期的解决方案设置第一个估算,算法也不会收敛。所以我觉得我做错了。
我使用错误的方法吗?任何人都可以给我一个好例子的链接,或者可以解释他对这个问题的处理方法。
非常感谢! : - )
答案 0 :(得分:0)
我解决了我的问题。 y向量的计算误差必须是负的,否则算法不会收敛。
y(i) = -E(i)