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.

affine2d

Transformación geométrica afín 2D

Descripción

Un objeto affine2d almacena información sobre una transformación geométrica afín 2D y permite las transformaciones directas e inversas.

Creación

Puede crear un objeto affine2d de los modos siguientes:

  • imregtform: estima una transformación geométrica que asigna una imagen variable a una imagen fija usando la optimización de similitud.

  • imregcorr: estima una transformación geométrica que asigna una imagen variable a una imagen fija usando la correlación de fase.

  • fitgeotrans: estima una transformación geométrica que asigna pares de puntos de control entre dos imágenes.

  • randomAffine2d: crea una transformación afín 2D aleatoria.

  • La función affine2d aquí descrita.

Descripción

tform = affine2d crea un objeto affine2d con valores predeterminados de propiedad que se corresponden con la transformación identidad.

ejemplo

tform = affine2d(T) establece la propiedad T como la matriz de transformación afín válida especificada.

Propiedades

expandir todo

Transformación afín 2D directa, especificada como matriz numérica de 3 por 3 no única.

La matriz T utiliza la convención:

[x y 1] = [u v 1] * T

en la que T tiene la forma:

 [a b 0;
  c d 0;
  e f 1];

El valor predeterminado de T es la transformación identidad.

Tipos de datos: double | single

Dimensionalidad de la transformación geométrica tanto para puntos de entrada como de salida, especificada como el valor 2.

Funciones del objeto

invertInvertir la transformación geométrica
isRigidDetermine if geometric transformation is rigid transformation
isSimilarityDetermine if geometric transformation is similarity transformation
isTranslationDetermine if geometric transformation is pure translation
outputLimitsFind output spatial limits given input spatial limits
transformPointsForwardApply forward geometric transformation
transformPointsInverseApply inverse geometric transformation

Ejemplos

contraer todo

Cree un objeto affine2d que defina una rotación de 30 grados en sentido contrario a las agujas del reloj alrededor del origen.

theta = 30;
tform = affine2d([ ...
    cosd(theta) sind(theta) 0;...
    -sind(theta) cosd(theta) 0; ...
    0 0 1])
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

Aplique la transformación geométrica directa a un punto (10,0).

[x,y] = transformPointsForward(tform,10,0)
x = 8.6603
y = 5

Valide la transformación representando el punto original (color azul) y el punto transformado (color rojo).

plot(10,0,'bo',x,y,'ro')
axis([0 12 0 12])
axis square

Figure contains an axes object. The axes object contains 2 objects of type line.

Lea una imagen en el espacio de trabajo.

A = imread('pout.tif');

Cree un objeto affine2d que defina una transformación geométrica afín. En este ejemplo se combina el corte vertical con el estiramiento horizontal.

tform = affine2d([2 0.33 0; 0 1 0; 0 0 1])
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

Aplique la transformación geométrica a la imagen utilizando imwarp.

B = imwarp(A,tform);

Muestre la imagen resultante.

figure
imshow(B);
axis on equal;

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

Lea y muestre una imagen.

I = imread('kobi.png');
imshow(I)

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

Cree un objeto de transformación affine2d que permita rotar imágenes. La función randomAffine2d toma un ángulo de rotación aleatoriamente a partir de una distribución uniforme continua dentro del intervalo [35, 55] grados.

tform1 = randomAffine2d('Rotation',[35 55]);

Rote la imagen y muestre el resultado.

J = imwarp(I,tform1);
imshow(J)

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

El objeto de transformación, tform1, rota todas las imágenes en la misma proporción. Para rotar una imagen en una proporción distinta a la seleccionada al azar, cree un nuevo objeto de transformación affine2d.

tform2 = randomAffine2d('Rotation',[-10 10]);
J2 = imwarp(I,tform2);
imshow(J2)

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

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 coincidentes 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 pueda 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 zonas 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

Capacidades ampliadas

Historial de versiones

Introducido en R2013a