Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Comparar formas manuscritas usando análisis Procrustes

Este ejemplo muestra cómo utilizar el análisis de Procrustes para comparar dos números escritos a mano. Explore visualmente y analíticamente los efectos de forzar los cambios de tamaño y reflexión.

Cargue y visualice los datos originales

Datos de hito de entrada para dos números escritos a mano.

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];

Crea y desde y, moviéndose hacia un lado para hacer que cada forma sea más visible.XYABB

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

Graficar las formas, usando letras para designar los puntos de referencia. Las líneas de la figura unen los puntos para indicar la ruta de dibujo de cada forma.

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]);

Calcule la mejor transformación

Utilice el análisis de Procrustes para encontrar la transformación que minimiza las distancias entre los puntos de datos de hito.

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

Las salidas de la función son (una medida de dessimilitud estandarizada), (una matriz de los puntos de referencia transformados) y (una matriz de estructura de la transformación calculada con campos, y que corresponden a la ecuación de transformación).dZtrTbc

Visualiza la forma transformada, usando una línea azul discontinua.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]);

Examine la similitud de las dos formas

Utilice dos valores numéricos diferentes, la medida de la dessimilitud y la medida de escalado, para evaluar la similitud de la forma de destino y la forma transformada.db

La medida de dessimilitud da un número entre 0 y 1 que describe la diferencia entre la forma de destino y la forma transformada.d Los valores cercanos a 0 implican formas más similares, mientras que los valores cercanos a 1 implican la dessimilitud.

d
d = 0.1502 

El pequeño valor de en este caso muestra que las dos formas son similares. calcula comparando la suma de las desviaciones cuadradas entre el conjunto de puntos con la suma de las desviaciones cuadradas de los puntos originales de sus medias de columna.dprocrustesd

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 

La medida d resultante es independiente de la escala del tamaño de las formas y tiene en cuenta sólo la similitud de los datos de hitos.

Examine la similitud de tamaño de las formas.

tr.b
ans = 0.9291 

Los tamaños de las formas de destino y comparación de la figura anterior parecen similares. Esta impresión visual se ve reforzada por el valor de =% 0,93, lo que implica que la mejor transformación resulta en la reducción de la forma de comparación por un factor. 93 (sólo 7%).b

Restrinja la forma de las transformaciones

Explore los efectos de ajustar manualmente los coeficientes de escala y reflexión.

Fuerza para igualar 1 (establecido en falso) para examinar la cantidad de dessimilitud en tamaño del objetivo y las figuras transformadas.b'Scaling'

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

En este caso, al establecer ' en false aumenta el valor calculado de sólo 0,0049, que admite aún más la similitud en el tamaño de los dos números de tres.'Scalingd Un aumento mayor en habría indicado una discrepancia de tamaño mayor.d

Este ejemplo requiere solo una rotación, no una reflexión, para alinear las formas. Puede mostrar esto observando que el determinante de la matriz es 1 en este análisis.T

det(tr.T)
ans = 1.0000 

Si necesita una reflexión en la transformación, el determinante de is-1.T Puede forzar un reflejo en la transformación de la siguiente manera.

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

El valor d aumenta drásticamente, lo que indica que una reflexión forzada conduce a una mala transformación de los puntos de referencia. Una trama de la forma transformada muestra un resultado similar.

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]);

Los puntos de datos históricos están ahora más lejos de sus homólogos de destino. El tres transformado es ahora una imagen de espejo no deseable del objetivo tres.

Parece que las formas podrían combinarse mejor si voltea la forma transformada al revés. Sin embargo, voltear las formas haría que la transformación fuera aún peor, ya que los puntos de datos históricos estarían más alejados de sus homólogos de destino. En este ejemplo, está claro que el ajuste manual de los parámetros de escalado y reflexión generalmente no es óptimo.

Consulte también

Temas relacionados