点对应的ICP权重
ICP weights of point correspondences
为了估计两个 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)
如果给对应关系赋予权重,那么相关矩阵要怎么计算呢?权重是否必须归一化,是否必须包含在中心的计算中?
如果你的权重的意思是你想最小化
Q = Sum{ i | w[i]*||fixed[i] - (R*loose[i] + t)||^2 }
(其中 w 是权重,x -> R*x + t 你的仿射图)
那么是的,中心应该都是加权平均值,'correlation'(真正的协方差)也应该是加权的。如果你的权重没有标准化,你应该先标准化它们。
也就是
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)' }
为了估计两个 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)
如果给对应关系赋予权重,那么相关矩阵要怎么计算呢?权重是否必须归一化,是否必须包含在中心的计算中?
如果你的权重的意思是你想最小化
Q = Sum{ i | w[i]*||fixed[i] - (R*loose[i] + t)||^2 }
(其中 w 是权重,x -> R*x + t 你的仿射图)
那么是的,中心应该都是加权平均值,'correlation'(真正的协方差)也应该是加权的。如果你的权重没有标准化,你应该先标准化它们。
也就是
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)' }