exponenta event banner

Сравнение рукописных фигур с помощью анализа 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]);

Figure contains an axes. The axes contains 22 objects of type line, text. These objects represent X = Target, Y = Comparison.

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

Используйте анализ 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]);

Figure contains an axes. The axes contains 33 objects of type line, text. These objects represent X = Target, Y = Comparison, Z = Transformed.

Изучение сходства двух форм

Используйте два различных числовых значения, измерение разнородности 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 'до false увеличивает вычисленное значение 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]);

Figure contains an axes. The axes contains 33 objects of type line, text. These objects represent X = Target, Y = Comparison, Z = Transformed.

Основные точки данных теперь находятся дальше от их целевых аналогов. Преобразованная тройка теперь является нежелательным зеркальным отображением целевой тройки.

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

См. также

Связанные темы