Сравните рукописные формы Используя анализ Procrustes

Этот пример показывает, как использовать анализ Procrustes, чтобы сравнить две рукописных тройки номера. Визуально и аналитически исследуйте эффекты принуждения размера и отражательных изменений.

Загрузите и отобразите исходные данные

Введите знаменательные данные для двух рукописных троек номера.

A = [11 39;17 42;25 42;25 40;23 36;19 35;30 34;35 29;...
30 20;18 19];
B = [15 31;20 37;30 40;29 35;25 29;29 31;31 31;35 20;...
29 10;25 18];

Создайте X и Y от A и B, переместив B в сторону, чтобы сделать каждую форму более видимой.

X = A;
Y = B + repmat([25 0], 10,1);

Постройте формы, с помощью букв, чтобы определять поворотные моменты. Строки в фигуре соединяют точки, чтобы указать на путь к рисунку каждой формы.

plot(X(:,1), X(:,2),'r-', Y(:,1), Y(:,2),'b-');
text(X(:,1), X(:,2),('abcdefghij')')
text(Y(:,1), Y(:,2),('abcdefghij')')
legend('X = Target','Y = Comparison','location','SE')
xlim([0 65]);
ylim([0 55]);

Вычислите лучшее преобразование

Используйте анализ Procrustes, чтобы найти преобразование, которое минимизирует расстояния между знаменательными точками данных.

[d,Z,tr] = procrustes(X,Y);

Выходными параметрами функции является d (стандартизированная мера по несходству), Z (матрица преобразованных ориентиров), и tr (массив структур вычисленного преобразования с полями T, b и c, которые соответствуют уравнению преобразования).

Визуализируйте преобразованную форму, Z, с помощью пунктирной синей строки.

plot(X(:,1), X(:,2),'r-', Y(:,1), Y(:,2),'b-',...
Z(:,1),Z(:,2),'b:');
text(X(:,1), X(:,2),('abcdefghij')')
text(Y(:,1), Y(:,2),('abcdefghij')')
text(Z(:,1), Z(:,2),('abcdefghij')')
legend('X = Target','Y = Comparison',...
'Z = Transformed','location','SW')
xlim([0 65]);
ylim([0 55]);

Исследуйте подобие двух форм

Используйте два различных численных значения, мера по несходству d и масштабирующаяся мера b, чтобы оценить подобие целевой формы и преобразованной формы.

Мера по несходству d дает номер между 0 и 1 описанием различия между целевой формой и преобразованной формой. Значения около 0 подразумевают более подобные формы, в то время как значения около 1 подразумевают несходство.

d
d = 0.1502

Маленькое значение d в этом случае показывает, что две формы подобны. procrustes вычисляет d путем сравнения суммы отклонений в квадрате между набором точек с суммой отклонений в квадрате исходных точек от их средних значений столбца.

numerator = sum(sum((X-Z).^2))
numerator = 166.5321
denominator = sum(sum(bsxfun(@minus,X,mean(X)).^2))
denominator = 1.1085e+03
ratio = numerator/denominator
ratio = 0.1502

Получившаяся мера d независима от шкалы размера форм и учитывает только подобие знаменательных данных.

Исследуйте подобие размера форм.

tr.b
ans = 0.9291

Размеры цели и форм сравнения в предыдущей фигуре кажутся подобными. Это визуальное впечатление укреплено значением b = % 0.93, который подразумевает, что лучшее преобразование приводит к уменьшению формы сравнения фактором.93 (только 7%).

Ограничьте форму преобразований

Исследуйте эффекты ручной корректировки масштабирования и отражательных коэффициентов.

Обеспечьте b, чтобы равняться 1 (установите 'Scaling' на ложь) исследовать сумму несходства в размере цели и преобразованных фигур.

ds = procrustes(X,Y,'Scaling',false)
ds = 0.1552

В этом случае установка 'Scaling 'ко лжи увеличивает расчетное значение d только 0,0049, который дальнейшие поддержки подобие в размере двух троек номера. Большее увеличение d указало бы на большее несоответствие размера.

Этот пример требует, чтобы только вращение, не отражение, выровняло формы. Можно показать это путем замечания, что детерминант матричного T 1 в этом анализе.

det(tr.T)
ans = 1.0000

Если вам нужно отражение в преобразовании, детерминант T-1. Можно обеспечить отражение в преобразование можно следующим образом.

[dr,Zr,trr] = procrustes(X,Y,'Reflection',true);
dr
dr = 0.8130

D повышения стоимости существенно, указывая, что принудительное отражение приводит к плохому преобразованию поворотных моментов. График преобразованной формы показывает подобный результат.

plot(X(:,1), X(:,2),'r-', Y(:,1), Y(:,2),'b-',...
Zr(:,1),Zr(:,2),'b:');
text(X(:,1), X(:,2),('abcdefghij')')
text(Y(:,1), Y(:,2),('abcdefghij')')
text(Zr(:,1), Zr(:,2),('abcdefghij')')
legend('X = Target','Y = Comparison',...
'Z = Transformed','Location','SW')
xlim([0 65]);
ylim([0 55]);

Знаменательные точки данных теперь еще дальше от их целевых дубликатов. Преобразованные три являются теперь нежелательным зеркальным отображением цели три.

Кажется, что формы могут быть лучше соответствующими, если вы инвертировали преобразованную форму вверх тормашками. Зеркальное отражение форм сделало бы преобразование еще хуже, однако, потому что знаменательные точки данных будут еще дальше от их целевых дубликатов. От этого примера ясно, что вручную корректировка масштабирования и отражательных параметров обычно не оптимальна.

Смотрите также

Похожие темы