В настоящее время я пишу проект о распознавании изображений и кластеризации.В публикации, которая является основой для моего проекта, есть это уравнение
Ниже приведено описание переменных
Rj - это матрица вращения j-й кластер
t_j - это вектор трансляции j-го кластера
p * ij - это i-тая точка из j-го кластера
x_i - естьi-тая точка на изображении
У меня была небольшая проблема с написанием этой функции, поэтому я спросил автора публикации, может ли он поделиться со мной исходным кодом.Вот что я получил
ddx=D.x-Q.translation(1);
ddy=D.y-Q.translation(2);
st=sin(Q.theta); ct=cos(Q.theta); R=[ct -st; st ct]; % rotation matrix
qq=R*[ppx0; ppy0];
qqd2=sum(qq.*qq,1);
Q.scale=sum((ddx.*qq(1,:)+ddy.*qq(2,:)).*Um) / sum(qqd2.*Um);
Здесь D.x
, а D.y
- координаты точек данных
Q.translation
(вектор), Q.scale
и Q.theta
являются параметрами преобразования
ppx0
и ppy0
являются x- и y- координатами * p ** ij
Um
- матрица, содержащая [ U m ij ]
Однако ятрудно понять это решение.Прежде всего, я не понимаю, почему он использует умножение массива (оператор .*
) вместо умножения матрицы (оператор *
), более того, кажется, что он берет только одну / первую точку p*
Я надеюсь, что кто-нибудь поможет мне попробовать этот исходный код.Заранее спасибо