Сравните рукописные формы Используя анализ 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 object. The axes object 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 object. The axes object 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 'ко лжи увеличивает расчетное значение 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 object. The axes object contains 33 objects of type line, text. These objects represent X = Target, Y = Comparison, Z = Transformed.

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

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

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

Похожие темы