Main Content

Visión general del proceso de transformación geométrica 2D y 3D

Para realizar una transformación geométrica 2D o 3D, primero cree un objeto de transformación geométrica para almacenar la información necesaria sobre la transformación. Después, pase la imagen que desee transformar y el objeto de transformación geométrica a la función imwarp. Opcionalmente, puede proporcionar información de referencias espaciales acerca de la imagen de entrada a imwarp.

Pass an input image and a geometric transformation object to imwarp, which returns a transformed image.

imwarp usa la transformación geométrica para asignar coordenadas en la imagen de salida a las coordenadas correspondientes de la imagen de entrada (asignación inversa). Después, imwarp usa la asignación de coordenadas para interpolar los valores de píxeles dentro de la imagen de entrada y calcular el valor del píxel de salida.

Crear objeto de transformación geométrica

Los diferentes tipos de objetos de transformación geométrica almacenan distinta información acerca de la transformación.

Hay varias formas de crear un objeto de transformación geométrica.

Enfoque para crear transformaciones geométricas

transltform2d

transltform3d

rigidtform2d

rigidtform3d

simtform2d

simtform3d

affinetform2d

affinetform3d

projective2d

geometricTransform2d

geometricTransform3d

Otras transformaciones geométricas
Especificar parámetros de traslación, rotación o escalaXX    
Especificar la matriz de transformaciónXXXX  
Especificar una función de asignación por puntos personalizada    X 
Estimar transformación a partir de pares de puntos de control X (2D)X (2D)X (2D) X
Estimar una transformación usando la optimización de similitudX (2D)X (2D)X (2D)   
Estimar transformaciones usando la correlación de faseX (2D)X (2D)    
Generar transformaciones afines aleatorias  X   

Especificar parámetros de traslación, rotación o escala

Si conoce la cantidad de traslación, el ángulo de rotación y el factor de escala, puede crear una transformación especificando estos parámetros.

  • Especifique la traslación para crear objetos transltform2d y transltform3d que representen transformaciones de traslación.

  • Especifique la traslación, los ángulos de rotación o ambos para crear objetos rigidtform2d y rigidtform3d que representen transformaciones rígidas.

  • Especifique cualquier combinación de traslación, rotación y un factor de escala isotrópica para crear objetos simtform2d y simtform3d que representen transformaciones de similitud no reflectivas.

El ejemplo siguiente define una traslación y un ángulo de rotación y, después, crea un objeto de transformación geométrica rigidtform2d a partir de los parámetros especificados.

theta = 30;
translation = [10 20.5];
tform = rigidtform2d(theta,translation)
tform = 

  rigidtform2d with properties:

    Dimensionality: 2
     RotationAngle: 30
       Translation: [10 20.5000]
                 R: [2×2 double]

                 A: [0.8660   -0.5000   10.0000
                     0.5000    0.8660   20.5000
                          0         0    1.0000]

Especificar la matriz de transformación

Para transformaciones geométricas lineales más complejas, puede representar la transformación como una matriz. Por ejemplo, utilice una representación de matriz para transformaciones proyectivas o para transformaciones afines que impliquen reflexión, escalado anisotrópico, sesgo o composiciones de transformaciones lineales. Especifique la matriz de transformación para crear un objeto affinetform2d, affinetform3d o projtform2d. Para obtener más información acerca de cómo crear una matriz de transformación, consulte Representación matricial de transformaciones geométricas.

El ejemplo siguiente define la matriz de transformación para escalado anisotrópico y reflexión sobre el eje y y, después, crea un objeto de transformación geométrica affinetform2d a partir de la matriz de transformación.

scaleX = 0.8;
scaleY = 1.5;
A = [scaleX 0 0; 0 -scaleY 0; 0 0 1];
tform = affinetform2d(A)
tform = 

  affinetform2d with properties:

    Dimensionality: 2

                 A: [0.8000         0         0
                          0   -1.5000         0
                          0         0    1.0000]

Especificar una función de asignación por puntos personalizada

Si tiene una función de asignación por puntos inversa, puede crear una transformación geométrica 2D y 3D personalizada con los objetos geometricTransform2d y geometricTransform3d, respectivamente.

El ejemplo siguiente especifica una función de asignación inversa que acepta y devuelve puntos 2D en formato empaquetado (x,y). Después, el ejemplo crea un objeto de transformación geométrica geometricTransform2d a partir de la función de asignación inversa.

inversefn = @(c) [c(:,1)+c(:,2),c(:,1).^2]
inversefn = 

  function_handle with value:

    @(c)[c(:,1)+c(:,2),c(:,1).^2]
tform = geometricTransform2d(inversefn)
tform = 

  geometricTransform2d with properties:

        InverseFcn: [function_handle]
        ForwardFcn: []
    Dimensionality: 2

Del mismo modo, el ejemplo siguiente crea un objeto de transformación geométrica geometricTransform3d con la función de asignación inversa. El ejemplo especifica una función de asignación inversa que acepta y devuelve puntos 3D en formato empaquetado (x,y,z).

inversefn = @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
inversefn = 

  function_handle with value:

    @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
tform = geometricTransform3d(inversefn)
tform = 

  geometricTransform3d with properties:

        InverseFcn: [function_handle]
        ForwardFcn: []
    Dimensionality: 3

Estimar transformación a partir de pares de puntos de control

Puede crear un objeto de transformación geométrica pasando pares de puntos de control a la función fitgeotform2d. La función fitgeotform2d estima automáticamente la transformación a partir estos puntos y devuelve uno de los objetos de transformación geométrica.

Las diferentes transformaciones requieren un número variable de puntos. Por ejemplo, las transformaciones afines requieren tres puntos no colineales en cada imagen (un triángulo) y las transformaciones proyectivas requieren cuatro puntos (un cuadrilátero).

En este ejemplo se definen dos pares de puntos de control y, después, usa fitgeotform2d para crear un objeto de transformación geométrica affinetform2d.

movingPoints = [11 11;21 11; 21 21];
fixedPoints = [51 51;61 51;61 61];
tform = fitgeotform2d(movingPoints,fixedPoints,"affine")
tform = 

  affinetform2d with properties:

    Dimensionality: 2

                 A: [1.0000         0   40.0000
                          0    1.0000   40.0000
                          0         0    1.0000]

Estimar una transformación usando la optimización de similitud

Si tiene una imagen fija y otra variable que están ligeramente desalineadas, puede usar la función imregtform para estimar una transformación geométrica afín que alinee las imágenes. imregtform optimiza los cuadráticos medios o matiza las métricas de similitud de información mutua de las dos imágenes usando un descenso de gradiente de paso regular o un optimizador evolutivo de uno más uno. Para obtener más información, consulte Create an Optimizer and Metric for Intensity-Based Image Registration.

Estimar transformaciones usando la correlación de fase

Si tiene una imagen fija y otra variable que están muy desalineadas, puede usar la función imregcorr para estimar una transformación geométrica afín que mejore la alineación de la imagen. Puede mejorar la transformación resultante usando la optimización de similitud.

Generar transformaciones afines aleatorias

Puede crear una transformación geométrica afín con parámetros de transformación aleatorios con las funciones randomAffine2d y randomAffine3d. Estas funciones son compatibles con todos los parámetros afines, incluyendo reflexión sobre cada eje, rotación, sesgo y factores de anisotrópica. Las transformaciones afines aleatorias se suelen usar como técnica de aumento de datos en deep learning.

Consulte también

Ejemplos relacionados

Más acerca de