Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

fitgeotrans

(No recomendado) Ajustar una transformación geométrica a pares de puntos de control

No se recomienda el uso de fitgeotrans. Utilice la función fitgeotform2d en su lugar. Para obtener más información, consulte Consideraciones relativas a la compatibilidad.

Descripción

ejemplo

tform = fitgeotrans(movingPoints,fixedPoints,tformType) ajusta una transformación geométrica lineal de tipo tformType a los pares de puntos de control movingPoints y fixedPoints.

tform = fitgeotrans(movingPoints,fixedPoints,"polynomial",degree) ajusta un objeto PolynomialTransformation2D a los pares de puntos de control movingPoints y fixedPoints. Especifique el grado de transformación polinómica, que puede ser 2, 3 o 4.

tform = fitgeotrans(movingPoints,fixedPoints,"pwl") ajusta un objeto PiecewiseLinearTransformation2D a los pares de puntos de control movingPoints y fixedPoints. Esta transformación crea una triangulación de Delaunay de los puntos de control fijos y aplica los puntos de control móviles a los puntos de control fijos correspondientes. Una transformación afín diferente aplica los puntos de control en cada región local. La asignación es continua por todos los puntos de control, pero no es diferenciable de manera continua.

tform = fitgeotrans(movingPoints,fixedPoints,"lwm",n) ajusta un objeto LocalWeightedMeanTransformation2D a los pares de puntos de control movingPoints y fixedPoints. La transformación de la media ponderada local crea una aplicación infiriendo un polinomio en cada punto de control usando los puntos de control contiguos. La aplicación en cualquier ubicación depende de la media ponderada de estos polinomios. Los n puntos más cercanos se utilizan para inferir una transformación polinómica de segundo grado para cada par de puntos de control.

Ejemplos

contraer todo

Cree una imagen de damero y gírela para crear una imagen desalineada.

I = checkerboard(40);
J = imrotate(I,30);
imshowpair(I,J,"montage")

Figure contains an axes object. The axes object contains an object of type image.

Defina algunos puntos de control correspondientes en la imagen fija (damero) y en la imagen variable (el damero rotado). Puede definir puntos de forma interactiva mediante la herramienta de selección de puntos de control.

fixedPoints = [41 41; 281 161];
movingPoints = [56 175; 324 160];

Cree una transformación geométrica afín que se puede utilizar para alinear dos imágenes.

tform = fitgeotform2d(movingPoints,fixedPoints,"similarity");

Utilice la estimación tform para remuestrear la imagen rotada y registrarla con la imagen fija. Las regiones de color (verde y magenta) de la imagen de superposición de color falso indican un error en el registro. Este error se debe a una falta de precisión en la correspondencia de los puntos de control.

Jregistered = imwarp(J,tform,OutputView=imref2d(size(I)));
imshowpair(I,Jregistered)

Figure contains an axes object. The axes object contains an object of type image.

Argumentos de entrada

contraer todo

Los puntos de control de la imagen variable, especificados como una matriz de m por 2. Cada fila especifica la coordenada (x, y) de un punto de control.

Ejemplo: movingPoints = [11 11; 41 71];

Tipos de datos: double | single

Los puntos de control de la imagen fija, especificados como una matriz de m por 2. Cada fila especifica la coordenada (x, y) de un punto de control.

Ejemplo: fixedPoints = [14 44; 70 81];

Tipos de datos: double | single

Tipo de transformación lineal, especificado como "nonreflectivesimilarity", "similarity", "affine" o "projective". Para obtener más información, consulte Tipos de transformación.

Tipos de datos: char | string

Grado del polinomio, especificado como el entero 2, 3 o 4.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Número de puntos que se desea usar en el cálculo de la media ponderada local, especificado como un entero positivo. n puede ser tan bajo como 6, pero establecer un valor bajo para n conlleva el riesgo de generar polinomios mal acondicionados.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Argumentos de salida

contraer todo

Transformación, devuelta como objeto de transformación geométrica. El tipo de objeto depende del tipo de transformación.

Tipo de transformación

Objeto de transformación geométrica
"nonreflectivesimilarity"affine2d
"similarity"affine2d
"affine"affine2d
"projective"projective2d
"polynomial"PolynomialTransformation2D
"pwl"PiecewiseLinearTransformation2D
"lwm"LocalWeightedMeanTransformation2D

Más acerca de

contraer todo

Tipos de transformación

En esta tabla se enumeran todos los tipos de transformación compatibles con fitgeotrans en orden de complejidad.

Tipo de transformación

DescripciónNúmero mínimo de pares de puntos de controlEjemplo
"nonreflectivesimilarity"Utilice esta transformación cuando las formas de la imagen en movimiento no han variado, pero la imagen está distorsionada por una combinación de traslación, rotación y escala. Las líneas rectas siguen siendo rectas y las paralelas siguen en paralelo. 2

Original and transformed checkerboard image. The transformed image appears rotated 45 degrees counter-clockwise.

"similarity"Es igual que "nonreflectivesimilarity" con la adición de reflexión opcional.3

Original and transformed checkerboard image. The transformed image appears rotated 45 degrees counter-clockwise and reflected along its vertical axis.

"affine"Utilice esta transformación cuando las formas de la imagen en movimiento muestran cizallado. Las líneas rectas siguen siendo rectas y las paralelas siguen en paralelo, pero los rectángulos se convierten en paralelogramos.3

Original and transformed checkerboard image. The transformed image appears sheared in the horizontal direction.

"projective"Utilice esta transformación cuando la escena parece inclinada. Las líneas rectas siguen siendo rectas, pero las paralelas convergen hacia un punto de fuga.4

Original and transformed checkerboard image. The transformed image appears tilted out of plane of the image.

"polynomial"Utilice esta transformación cuando los objetos de la imagen aparecen curvados. Cuanto mayor sea el orden del polinomio, mejor será el ajuste, pero el resultado puede contener más curvas que la imagen fija.

6 (orden 2)

10 (orden 3)

15 (orden 4)

Original and transformed checkerboard image. The transformed image appears curved.

"pwl"Utilice esta transformación (lineal a trozos) cuando partes de la imagen aparecen distorsionadas de manera distinta.4

Original and transformed checkerboard image. The right side of the transformed image appears stretched horizontally.

"lwm"Utilice esta transformación (media ponderada local) cuando la distorsión varía localmente y la lineal a trozos no es suficiente. 6 (12 recomendado)

Original and transformed checkerboard image. The transformed image appears nonuniformly stretched.

Referencias

[1] Goshtasby, Ardeshir. “Piecewise Linear Mapping Functions for Image Registration.” Pattern Recognition 19, no. 6 (January 1986): 459–66. https://doi.org/10.1016/0031-3203(86)90044-0.

[2] Goshtasby, Ardeshir. “Image Registration by Local Approximation Methods.” Image and Vision Computing 6, no. 4 (November 1988): 255–61. https://doi.org/10.1016/0262-8856(88)90016-9.

Capacidades ampliadas

Historial de versiones

Introducido en R2013b

expandir todo

R2022b: No recomendado

A partir de la versión R2022b, la mayoría de funciones de Image Processing Toolbox™ crean y realizan transformaciones geométricas utilizando la convención de la premultiplicación. Sin embargo, la función fitgeotrans estima las transformaciones geométricas lineales mediante la convención de la posmultiplicación. Aunque no está previsto eliminar fitgeotrans por el momento, puede simplificar sus flujos de transformación geométrica cambiando a la función fitgeotform2d, que es compatible con la convención de la premultiplicación. Para obtener más información, consulte Migrate Geometric Transformations to Premultiply Convention.

Para actualizar su código, cambie las instancias del nombre de la función fitgeotrans a fitgeotform2d. También debe cambiar el valor de tformType para estos dos tipos de transformación:

  • Reemplace "nonreflectivesimilarity" con "similarity". El tipo de transformación "similarity" admite traslación, rotación y escalado, pero no admite reflexión.

  • Reemplace "similarity" con "reflectivesimilarity". La transformación "reflectivesimilarity" admite traslación, rotación, escalado y reflexión.

No es necesario cambiar los demás argumentos.

Uso no recomendadoReemplazo recomendado

En este ejemplo se estima una transformación afín 2D a partir de tres pares de puntos de control mediante la función fitgeotrans.

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotrans(mp,fp,"affine");

En este ejemplo se estima una transformación afín 2D a partir de tres pares de puntos de control mediante la función fitgeotform.

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotform2d(mp,fp,"affine");

En este ejemplo se estima una transformación afín 2D que consiste únicamente en traslación, rotación y escalado isotrópico.

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotrans(mp,fp,"nonreflectivesimilarity");

En este ejemplo se estima una transformación afín 2D que consiste únicamente en traslación, rotación y escalado isotrópico.

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotform2d(mp,fp,"similarity");

En este ejemplo se estima una transformación afín 2D que consiste únicamente en translación, rotación, escalado isotrópico y reflexión.

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotrans(mp,fp,"similarity");

En este ejemplo se estima una transformación afín 2D que consiste únicamente en translación, rotación, escalado isotrópico y reflexión.

mp = [14.5 44.6; 31.8 34.8; 44.4 96.9];
fp = [10.5 10.5; 30.5 10.5; 10.5 70.5];
tform = fitgeotform2d(mp,fp,"reflectivesimilarity");