Кластеризация изображений - проблема с функцией Matlab - PullRequest
0 голосов
/ 19 марта 2011

В настоящее время я пишу проект о распознавании изображений и кластеризации.В публикации, которая является основой для моего проекта, есть это уравнение

enter image description here

Ниже приведено описание переменных

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*

Я надеюсь, что кто-нибудь поможет мне попробовать этот исходный код.Заранее спасибо

1 Ответ

1 голос
/ 21 марта 2011

похоже, что ppx0 и ppy0 - это не координаты, а векторы или координаты. Таким образом,

R*[ppx0; ppy0] =
[ct -st ; st ct] * [x_0 x_1 ... x_N-1 ; y_0 y_1 ... y_N-1]

Следовательно, qq - это вектор 2xN, как и [ppx0; ppy0].

В qqd2=sum(qq.*qq,1) используется оператор .*, потому что вы фактически возводите в квадрат каждое значение матрицы, чтобы позже найти квадратное расстояние каждой из ее пар координат.

В ddx.*qq(1,:)+ddy.*qq(2,:) оператор .* используется в качестве ярлыка для замены двойной суммы. Другими словами, вместо того, чтобы брать сумму каждого матричного произведения индивидуально (что само по себе является суммой умножения), они сначала выполняли все необходимые умножения, а затем брали сумму. (Я надеюсь это имеет смысл). Вы можете доказать всю эту работу с помощью некоторой базовой матричной алгебры.

...