Para realizar una transformación geométrica 2D o 3D, cree primero un objeto de transformación geométrica que almacene información sobre la transformación. A continuación, pase la imagen que se va a transformar y el objeto de transformación geométrica a la función.imwarp
Opcionalmente, puede proporcionar información de referencia espacial sobre la imagen de entrada a .imwarp
Diferentes tipos de objetos de transformación geométrica almacenan información diferente sobre la transformación.
Los objetos , , y almacenan una matriz de transformación.affine2d
projective2d
affine3d
Los objetos y almacenan una función de asignación inversa de puntos y, opcionalmente, una función de asignación de puntos hacia delante.geometricTransform2d
geometricTransform3d
Otros tipos de transformación, incluidos los objetos , y , almacenan una asignación entre pares de puntos de control.LocalWeightedMeanTransformation2D
PiecewiseLinearTransformation2D
PolynomialTransformation2D
Hay varias maneras de crear un objeto de transformación geométrica.
Enfoque para crear objetos de tranformación | affine2d | affine3d | projective2d | geometricTransform2d / geometricTransform3d | Otros objetos de transformación |
---|---|---|---|---|---|
Definir matriz de transformación | X | X | X | ||
Definir función de asignación de puntos personalizados | X | ||||
Estimar la transformación a partir de pares de puntos de control | X | X | X | ||
Estimar la transformación mediante la optimización de similitud | X | X | |||
Estimar la transformación mediante la correlación de fases | X |
Si conoce la matriz de transformación para la transformación geométrica que desea realizar, puede crear directamente un objeto de transformación , o geométrico.affine2d
projective2d
affine3d
Para obtener más información sobre cómo crear una matriz de transformación, consulte .Representación matriz de transformaciones geométricas
En el ejemplo siguiente se define la matriz de transformación para una traducción 2D y se crea un objeto de transformación geométrica.affine2d
xform = [ 1 0 0 0 1 0 40 40 1 ]; tform_translate = affine2d(xform);
tform_translate = affine2d with properties: T: [3x3 double] Dimensionality: 2
Si tiene una función de asignación inversa de puntos, puede definir una transformación geométrica 2D y 3D personalizada utilizando los objetos y los objetos respectivamente.geometricTransform2d
geometricTransform3d
En el ejemplo siguiente se especifica una función de asignación inversa que acepta y devuelve puntos 2D en formato empaquetado ( , ).xy A continuación, el ejemplo crea un objeto de transformación geométrica personalizado.geometricTransform2d
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: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)] ForwardFcn: [] Dimensionality: 2
De forma similar, en el ejemplo siguiente se crea un objeto de transformación geométrica personalizado mediante la función de asignación inversa.geometricTransform3d
En el ejemplo se especifica una función de asignación inversa que acepta y devuelve puntos 3D en formato empaquetado ( , , ).xyz
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: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2] ForwardFcn: [] Dimensionality: 3
Puede crear un objeto de transformación geométrica pasando dos conjuntos de pares de puntos de control a la función.fitgeotrans
La función estima automáticamente la transformación a partir de estos puntos y devuelve uno de los objetos de transformación geométrica.fitgeotrans
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 pasan dos conjuntos de puntos de control a , que devuelve un objeto de transformación geométrica.fitgeotrans
affine2d
movingPoints = [11 11;21 11; 21 21]; fixedPoints = [51 51;61 51;61 61]; tform_cpp = fitgeotrans(movingPoints,fixedPoints,'affine')
tform_cpp = affine2d with properties: T: [3x3 double] Dimensionality: 2
Si tiene una imagen fija y una imagen en movimiento ligeramente desalineadas, puede utilizar la función para estimar una transformación geométrica afín que alinee las imágenes. optimiza los cuadrados medios o la métrica de similitud de información mutua Mattes de las dos imágenes, utilizando un descenso de gradiente de paso regular o un optimizador evolutivo uno más uno.imregtform
imregtform
Para obtener más información, consulte .Crear un optimizador y una métrica para el registro de imágenes basadas en intensidad
Si tiene una imagen fija y una imagen en movimiento que están muy desalineadas, puede utilizar la función para estimar una transformación geométrica afín que mejore la alineación de la imagen.imregcorr
Puede refinar la transformación resultante mediante la optimización de similitud.
Después de definir la transformación en un objeto de transformación geométrica, realice la transformación mediante la función.imwarp
Al llamar a la función, especifique la imagen que se va a transformar y el objeto de transformación geométrica.
utiliza la transformación geométrica para asignar coordenadas en la imagen de salida a las coordenadas correspondientes en la imagen de entrada (asignación inversa).imwarp
A continuación, utiliza la asignación de coordenadas para interpolar valores de píxel dentro de la imagen de entrada y calcular el valor de píxel de salida.imwarp
affine2d
| affine3d
| fitgeotrans
| geometricTransform2d
| geometricTransform3d
| imwarp
| projective2d