Итеративная реализация ближайшей точки - PullRequest
6 голосов
/ 12 декабря 2010

В настоящее время я использую следующий псевдокод для реализации алгоритма ICP в C #. Получено из ICP Powerpoint

function ICP(Scene,Model)
 begin
  E` = + ∞;
  (Rot,Trans) = In Initialize-Alignment(Scene,Model);
  repeat 
E = E`;
Aligned-Scene = Apply-Alignment(Scene,Rot,Trans);
Pairs = Return-Closest-Pairs(Aligned-Scene,Model);
(Rot,Trans,E`) = Update-Alignment(Scene,Model,Pairs,Rot,Trans);
  Until |E`- E|  < Threshold
  return (Rot,Trans);
 end    

Однако я не совсем уверен, как следует реализовать выравнивание обновлений? Если бы кто-то мог объяснить это немного яснее, чем powerpoint, это было бы здорово :) Я написал методы для вычисления ошибки соответствия и ошибки выравнивания, однако я не уверен, как применять их, чтобы получить новое обновленное выравнивание.

1 Ответ

0 голосов
/ 15 декабря 2010

Формулы на слайде 10 (на самом деле это два эквивалентных способа написания одной и той же формулы) дают среднеквадратичную ошибку вашего выравнивания. Вы хотите выбрать вращение и перемещение (вектор q является их комбинацией), чтобы минимизировать среднеквадратическую ошибку. MSE - хорошая, дифференцируемая функция вектора q, поэтому легко использовать что-то вроде метода сопряженных градиентов, начиная с текущего выравнивания, чтобы найти новое выравнивание, которое (по крайней мере локально) минимизирует MSE.

...