为了估计两个3D点集之间的仿射变换,其中已经建立了相应的点对,我在对这样计算的相关矩阵(伪代码)上使用单值分解:
vector3 fixed_center = (0, 0, 0)
vector3 loose_center = (0, 0, 0)
n = 0
foreach (fixed_pt, loose_pt) in correspondences
fixed_center += fixed_pt
loose_center += loose_pt
n++
fixed_center /= n
loose_center /= n
matrix3x3 correlation = ((0,0,0), (0,0,0), (0,0,0))
foreach (fixed_pt, loose_pt) in correspondences
correlation += (fixed_pt - fixed_center) * (loose_pt - loose_center)
如果将权重分配给对应关系,那么必须如何计算相关矩阵?权重是否必须标准化,是否必须包括在中心的计算中?
答案 0 :(得分:2)
如果您的权重的含义是您想要最小化
Q = Sum{ i | w[i]*||fixed[i] - (R*loose[i] + t)||^2 }
(其中w是权重,x - > R * x + t你的仿射图)
然后是的,中心应该都是加权平均值,“相关性”(真正的协方差)也应该加权。如果你的体重没有标准化,你应该先将它们标准化。
那是
f_centre = Sum{ i | w[i]*fixed[i] }
l_centre = Sum{ i | w[i]*loose[i] }
covar = Sum{ i | w[i] * (fixed[i]-f_centre)*(loose[i]-l_centre)' }