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
.
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.
Varios objetos almacenan una matriz de transformación que representa un tipo específico de trasformación geométrica lineal. Estos objetos incluyen:
affinetform2d
,affinetform3d
,rigidtform2d
,rigidtform3d
,simtform2d
,simtform3d
,transltform2d
,transltform3d
yprojtform2d
.Los objetos
geometricTransform2d
ygeometricTransform3d
almacenan una función de asignación por puntos inversa y, opcionalmente, una función de asignación por puntos directa.El objeto
PolynomialTransformation2D
almacena una asignación por puntos inversa en forma de polinomio 2D.Los objetos
LocalWeightedMeanTransformation2D
yPiecewiseLinearTransformation2D
representan diferentes formas de funciones de asignación por puntos que varían localmente.
Hay varias formas de crear un objeto de transformación geométrica.
Enfoque para crear transformaciones geométricas |
|
|
| projective2d |
| Otras transformaciones geométricas |
---|---|---|---|---|---|---|
Especificar parámetros de traslación, rotación o escala | X | X | ||||
Especificar la matriz de transformación | X | X | X | X | ||
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 similitud | X (2D) | X (2D) | X (2D) | |||
Estimar transformaciones usando la correlación de fase | X (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
ytransltform3d
que representen transformaciones de traslación.Especifique la traslación, los ángulos de rotación o ambos para crear objetos
rigidtform2d
yrigidtform3d
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
ysimtform3d
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.