Main Content

fitgeotrans

Ajustar una transformación geométrica a pares de puntos de control

Descripción

ejemplo

tform = fitgeotrans(movingPoints,fixedPoints,transformationType) toma los pares de puntos de control, movingPoints y fixedPoints, y los usa para inferir la transformación geométrica especificada por transformationType.

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 degree, 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 aplica los puntos de control dividiendo el plano en regiones locales lineales/a trozos. Una transformación afín diferente aplica los puntos de control en cada región local.

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

En este ejemplo se muestra cómo crear una transformación geométrica que se puede utilizar para alinear dos imágenes.

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 que se puede utilizar para alinear dos imágenes, devuelta como un objeto de transformación geométrica affine2d.

tform = fitgeotrans(movingPoints,fixedPoints,'NonreflectiveSimilarity')
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

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)));
figure
imshowpair(I,Jregistered)

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

Recupere el ángulo y la escala de la transformación comprobando cómo se rota y se estira un vector unitario paralelo al eje x.

u = [0 1]; 
v = [0 0]; 
[x, y] = transformPointsForward(tform, u, v); 
dx = x(2) - x(1); 
dy = y(2) - y(1); 
angle = (180/pi) * atan2(dy, dx) 
angle = 29.7686
scale = 1 / sqrt(dx^2 + dy^2)
scale = 1.0003

Argumentos de entrada

contraer todo

Coordenadas x e y de los puntos de control de la imagen que desea transformar, especificadas como una matriz de m por 2.

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

Tipos de datos: double | single

Coordenadas x e y de los puntos de control de la imagen fija, especificadas como una matriz de m por 2.

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

Tipos de datos: double | single

Tipo de transformación, especificado como uno de los siguientes: '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. El tipo de objeto depende del tipo de transformación. Por ejemplo, si especifica el tipo de transformación 'affine', entonces tform es un objeto affine2d. Si especifica 'pwl', entonces tform es un objeto image.geotrans.PiecewiseLinearTransformation2d.

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

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

'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

'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

'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)

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

'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)

Referencias

[1] Goshtasby, Ardeshir, "Piecewise linear mapping functions for image registration," Pattern Recognition, Vol. 19, 1986, pp. 459-466.

[2] Goshtasby, Ardeshir, "Image registration by local approximation methods," Image and Vision Computing, Vol. 6, 1988, pp. 255-261.

Capacidades ampliadas

Historial de versiones

Introducido en R2013b