Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

geometricTransform2d

Objeto de transformación geométrica 2D

Descripción

Un objeto define una transformación geométrica 2D personalizada mediante funciones de asignación de puntos.geometricTransform2d

Creación

Descripción

ejemplo

tform = geometricTransform2d(inverseFcn) crea un objeto y establece la asignación inversageometricTransform2d InverseFcn Propiedad.

tform = geometricTransform2d(inverseFcn,fowardFcn) también establece la propiedad de mapeo hacia adelante, ForwardFcn.

Propiedades

expandir todo

Función de asignación inversa, especificada como un identificador de función. La función debe aceptar y devolver coordenadas como una matriz numérica -by-2 que representa las coordenadas empaquetadas ( , ) de puntos.nxyn

Para obtener más información acerca de los identificadores de función, consulte .Create Function Handle (MATLAB)

Ejemplo: ifcn = @(xy) [xy(:,1).^2, sqrt(xy(:,2))];

Función de asignación directa, especificada como un identificador de función. La función debe aceptar y devolver coordenadas como una matriz numérica -by-2 que representa las coordenadas empaquetadas ( , ) de puntos.nxyn

Para obtener más información acerca de los identificadores de función, consulte .Create Function Handle (MATLAB)

Ejemplo: ffcn = @(xy) [sqrt(xy(:,1)),(xy(:,2).^2)];

Funciones del objeto

transformPointsForwardAplicar la transformación geométrica hacia adelante
transformPointsInverseAplicar transformación geométrica inversa

Ejemplos

contraer todo

Especifique las coordenadas empaquetadas (x,y) de cinco puntos de entrada. Las coordenadas empaquetadas se almacenan en una matriz de 5 por 2, donde la coordenada -coordenada de cada punto está en la primera columna y la coordenada -de cada punto está en la segunda columna.xy

XY = [10 15;11 32;15 34;2 7;2 10];

Defina la función de asignación inversa. La función acepta y devuelve puntos en formato empaquetado (x,y).

inversefn = @(c) [c(:,1)+c(:,2),c(:,1)-c(:,2)]
inversefn = function_handle with value:
    @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)]

Cree un objeto de transformación geométrica 2D, que almacene la función de asignación inversa.tform

tform = geometricTransform2d(inversefn)
tform =    geometricTransform2d with properties:          InverseFcn: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)]         ForwardFcn: []     Dimensionality: 2  

Aplique la transformación geométrica inversa a los puntos de entrada.

UV = transformPointsInverse(tform,XY)
UV = 5×2

    25    -5
    43   -21
    49   -19
     9    -5
    12    -8

Especifique los vectores de coordenadas x e y de cinco puntos para transformar.

x = [10 11 15 2 2]; y = [15 32 34 7 10];

Defina las funciones de asignación inversa y directa. Ambas funciones aceptan y devuelven puntos en formato empaquetado (x,y).

inversefn = @(c) [c(:,1).^2,sqrt(c(:,2))]; forwardfn = @(c) [sqrt(c(:,1)),c(:,2).^2];

Cree un objeto de transformación geométrica 2D, que almacene la función de asignación inversa y la función de asignación directa opcional.tform

tform = geometricTransform2d(inversefn,forwardfn)
tform =    geometricTransform2d with properties:          InverseFcn: @(c)[c(:,1).^2,sqrt(c(:,2))]         ForwardFcn: @(c)[sqrt(c(:,1)),c(:,2).^2]     Dimensionality: 2  

Aplique la transformación geométrica inversa a los puntos de entrada.

[u,v] = transformPointsInverse(tform,x,y)
u = 1×5

   100   121   225     4     4

v = 1×5

    3.8730    5.6569    5.8310    2.6458    3.1623

Aplique la transformación geométrica hacia delante a los puntos transformados y .uv

[x,y] = transformPointsForward(tform,u,v)
x = 1×5

    10    11    15     2     2

y = 1×5

   15.0000   32.0000   34.0000    7.0000   10.0000

Defina una función de asignación inversa que aplique el escalado anisotrópico. La función debe aceptar y devolver las coordenadas empaquetadas (x,y), donde la coordenada -coordenada de cada punto está en la primera columna, y la coordenada -de cada punto está en la segunda columna.xy

xscale = 0.3; yscale = 0.5; inversefn = @(xy) [xscale*xy(:,1), yscale*xy(:,2)];

Cree un objeto de transformación geométrica 2D, que almacene la función de asignación inversa.tform

tform = geometricTransform2d(inversefn)
tform =    geometricTransform2d with properties:          InverseFcn: @(xy)[xscale*xy(:,1),yscale*xy(:,2)]         ForwardFcn: []     Dimensionality: 2  

Lea una imagen para transformarla.

I = imread('cameraman.tif'); imshow(I)

Se utiliza para aplicar la transformación geométrica inversa a la imagen de entrada.imwarp La imagen se amplía verticalmente por un factor de 2 (el inverso de ) y horizontalmente por un factor de 10/3 (el inverso de ).yscalexscale

Itransformed = imwarp(I,tform); imshow(Itransformed)

Defina una función de asignación inversa que acepte coordenadas empaquetadas (x,y), donde la coordenada -coordenada de cada punto está en la primera columna y la coordenada -de cada punto está en la segunda columna.xy La función de asignación inversa de este ejemplo toma el cuadrado del componente radial polar.

r = @(c) sqrt(c(:,1).^2 + c(:,2).^2); w = @(c) atan2(c(:,2), c(:,1)); f = @(c) [r(c).^2 .* cos(w(c)), r(c).^2 .* sin(w(c))]; g = @(c) f(c);

Cree un objeto de transformación geométrica 2D, que almacene la función de asignación inversa.tform

tform = geometricTransform2d(g);

Lea una imagen en color que se va a transformar.

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

Cree un objeto, especificando el tamaño y los límites mundiales de las imágenes de entrada y salida.imref2d

Rin = imref2d(size(I),[-1 1],[-1 1]); Rout = imref2d(size(I),[-1 1],[-1 1]);

Aplique la transformación geométrica inversa a la imagen de entrada.

Itransformed = imwarp(I,Rin,tform,'OutputView',Rout); imshow(Itransformed)

Introducido en R2018b