0

Для оценки аффинного преобразования между двумя наборами 3D точек, где были установлены соответствующие пары точек, я использую разложение на одно значение корреляционной матрицы, рассчитанной так (псевдокод):ICP вес точечных соответствий

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) 

Если веса присваиваются соответствию, как должна вычисляться матрица корреляции? Нужно ли нормализовать веса, и нужно ли их включать в расчет центров?

ответ

2

Если смысл ваших весов является то, что вы хотите, чтобы свести к минимуму

Q = Sum{ i | w[i]*||fixed[i] - (R*loose[i] + t)||^2 } 

(где ж это веса, х -> R * х + т ваше аффинное отображение)

Тогда да, центры должны быть взвешенными средними, а «корреляция» (действительно ковариация) также должна быть взвешена. Если ваши веса не нормализованы, вы должны сначала их нормализовать.

Это

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)' } 
Смежные вопросы