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.

imwarp

Aplicar la transformación geométrica a una imagen

Descripción

ejemplo

B = imwarp(A,tform) transforma la imagen numérica, lógica o categórica A según la transformación geométrica tform. La función devuelve la imagen transformada en B.

B = imwarp(A,D) transforma la imagen A según el campo de desplazamiento D.

[B,RB] = imwarp(A,RA,tform) transforma una imagen con referencia espacial especificada por los datos de la imagen A y su objeto de referencia espacial asociado RA. Las salidas son una imagen con referencia espacial especificada por los datos de la imagen B y su objeto de referencia espacial asociado RB.

[___] = imwarp(___,interp) especifica el tipo de interpolación que usar.

ejemplo

[___] = imwarp(___,Name,Value) especifica argumentos de nombre-valor para controlar los diversos aspectos de la transformación geométrica.

Sugerencia

Si la transformación de entrada tform no define una transformación hacia adelante, utilice el argumento nombre-valor OutputView para acelerar la transformación.

Ejemplos

contraer todo

Lea una imagen en escala de grises en el espacio de trabajo y muéstrela.

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

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

Cree un objeto de transformación geométrica 2D.

tform = affine2d([1 0 0; .5 1 0; 0 0 1])
tform = 
  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

Aplique la transformación a la imagen.

J = imwarp(I,tform);
figure
imshow(J)

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

Cargue datos de RM 3D en el espacio de trabajo y visualícela.

s = load('mri');
mriVolume = squeeze(s.D);
sizeIn = size(mriVolume);
hFigOriginal = figure;
hAxOriginal  = axes;
slice(double(mriVolume),sizeIn(2)/2,sizeIn(1)/2,sizeIn(3)/2);
grid on, shading interp, colormap gray

Figure contains an axes object. The axes object contains 3 objects of type surface.

Cree un objeto de transformación geométrica 3D. Primero cree una matriz de transformación que rote la imagen alrededor del eje y. A continuación, cree un objeto affine3d a partir de la matriz de transformación.

theta = pi/8;
t = [cos(theta)  0      -sin(theta)   0
     0             1              0     0
     sin(theta)    0       cos(theta)   0
     0             0              0     1];
tform = affine3d(t)
tform = 
  affine3d with properties:

                 T: [4x4 double]
    Dimensionality: 3

Aplique la transformación a la imagen.

mriVolumeRotated = imwarp(mriVolume,tform);

Visualice tres planos de corte a través del centro de los volúmenes transformados.

sizeOut = size(mriVolumeRotated);
hFigRotated = figure;
hAxRotated  = axes;
slice(double(mriVolumeRotated),sizeOut(2)/2,sizeOut(1)/2,sizeOut(3)/2)
grid on, shading interp, colormap gray

Figure contains an axes object. The axes object contains 3 objects of type surface.

Vincule las vistas de ambos ejes.

linkprop([hAxOriginal,hAxRotated],'View');

Ajuste la vista para ver el efecto de la rotación.

set(hAxRotated,'View',[-3.5 20.0])

Figure contains an axes object. The axes object contains 3 objects of type surface.

Figure contains an axes object. The axes object contains 3 objects of type surface.

Lea y muestre una imagen. Para ver las extensiones espaciales de la imagen, haga visibles los ejes.

A = imread('kobi.png');
iptsetpref('ImshowAxesVisible','on')
imshow(A)

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

Cree un elemento estructurante afín 2D. Este ejemplo crea una transformación aleatoria que consta de una escala por un factor en el intervalo [1,2, 2,4], una rotación por un ángulo en el intervalo [-45, 45] grados, y una traslación horizontal por una distancia en el intervalo de [100, 200] píxeles.

tform = randomAffine2d('Scale',[1.2,2.4],'XTranslation',[100 200],'Rotation',[-45,45]);

Cree tres vistas de salida diferentes para la imagen y la transformación.

centerOutput = affineOutputView(size(A),tform,'BoundsStyle','CenterOutput');
followOutput = affineOutputView(size(A),tform,'BoundsStyle','FollowOutput');
sameAsInput = affineOutputView(size(A),tform,'BoundsStyle','SameAsInput');

Aplique la transformación a la imagen de entrada utilizando cada uno de los diferentes estilos de vista de salida.

BCenterOutput = imwarp(A,tform,'OutputView',centerOutput);
BFollowOutput = imwarp(A,tform,'OutputView',followOutput);
BSameAsInput = imwarp(A,tform,'OutputView',sameAsInput);

Muestre las imágenes resultantes.

imshow(BCenterOutput)
title('CenterOutput Bounds Style');

Figure contains an axes object. The axes object with title CenterOutput Bounds Style contains an object of type image.

imshow(BFollowOutput)
title('FollowOutput Bounds Style');

Figure contains an axes object. The axes object with title FollowOutput Bounds Style contains an object of type image.

imshow(BSameAsInput)
title('SameAsInput Bounds Style');

Figure contains an axes object. The axes object with title SameAsInput Bounds Style contains an object of type image.

iptsetpref('ImshowAxesVisible','off')

Argumentos de entrada

contraer todo

Imagen que se desea transformar, especificada como arreglo numérico, lógico o categórico de cualquier dimensión.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | categorical

Transformación geométrica que aplicar, especificada como un objeto rigid2d, affine2d, projective2d, rigid3d o affine3d.

  • Si tform es 2D y A tiene más de dos dimensiones, como en el caso de una imagen RGB, entonces imwarp aplica la misma transformación 2D a todos los planos 2D a lo largo de las dimensiones superiores.

  • Si tform es 3D, entonces A debe ser una imagen de volumen 3D.

Campo de desplazamiento, especificado como arreglo numérico. El campo de desplazamiento define el tamaño de la cuadrícula y la ubicación de la imagen de salida. Los valores de desplazamiento están en unidades de píxeles. imwarp asume que D está referenciado al sistema de coordenadas intrínseco predeterminado. Para estimar el campo de desplazamiento, utilice imregdemons.

  • Si A es una imagen 2D en escala de grises de tamaño m por n, especifique el campo de desplazamiento como un arreglo de m por n por 2. D(:,:,1) contiene los desplazamientos a lo largo del eje x. imwarp añade estos valores a las ubicaciones de las columnas y filas en D para producir ubicaciones reasignadas en A. Del mismo modo D(:,:,2) contiene los desplazamientos a lo largo del eje y.

  • Si A es una imagen 2D RGB o multiespectral de tamaño m por n por c y se especifica D como un arreglo de m por n por 2, imwarp opera en cada canal de color 2D de forma independiente. D(:,:,1) contiene los desplazamientos a lo largo del eje x para todos los canales de color. Del mismo modo D(:,:,2) contiene los desplazamientos a lo largo del eje y.

  • Si A es una imagen 3D en escala de grises de tamaño m por n por p, especifique el arreglo del campo de desplazamiento como un arreglo de m por n por p por 3. D(:,:,:,1) contiene los desplazamientos a lo largo del eje x. imwarp añade estos valores a las ubicaciones de columna, fila y profundidad en D para producir ubicaciones reasignadas en A. De la misma manera, D(:,:,:,2) y D(:,:,:,3) contienen los desplazamientos a lo largo de los ejes y y z.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Información de referencia espacial de la imagen a transformar, especificada como un objeto imref2d para una transformación 2D o un objeto imref3d para una transformación 3D.

Tipo de interpolación utilizada, especificado como uno de estos valores.

Método de interpolaciónDescripción
"nearest"

Interpolación del elemento más cercano. Al píxel de salida se le asigna el valor del píxel en el que cae el punto. No se tienen en cuenta otros píxeles.

La interpolación del elemento más cercano es el único método compatible con las imágenes categóricas y es el método predeterminado para las imágenes de este tipo.

"linear"Interpolación lineal. Este es el método de interpolación predeterminado para las imágenes numéricas y lógicas.
"cubic"Interpolación cúbica

Tipos de datos: char | string

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales como Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos de nombre-valor deben aparecer después de otros argumentos. Sin embargo, el orden de los pares no importa.

Ejemplo: B = imwarp(A,tform,FillValues=255) utiliza un valor de relleno de 255

En las versiones anteriores a la R2021a, utilice comas para separar cada nombre y valor, y encierre Name entre comillas.

Ejemplo: B = imwarp(A,tform,"FillValues",255) utiliza un valor de relleno de 255

Tamaño y ubicación de la imagen de salida en el sistema de coordenadas mundial, especificados como un objeto de referencia espacial imref2d o imref3d. El objeto tiene propiedades que definen el tamaño de la imagen de salida y la ubicación de la misma en el sistema de coordenadas mundial.

Puede crear una vista de salida utilizando la función affineOutputView. Para replicar la vista de salida predeterminada calculada por imwarp, utilice el estilo de límites predeterminado ("CenterOutput") de affineOutputView.

No se puede especificar OutputView cuando se especifica un campo de desplazamiento de entrada D.

Valores de relleno utilizados para los píxeles de salida fuera de la imagen de entrada, especificados como uno de los valores de la tabla. imwarp utiliza valores de relleno para los píxeles de salida cuando la ubicación transformada inversa correspondiente en la imagen de entrada está completamente fuera de los límites de la imagen de entrada.

El valor de relleno predeterminado de las imágenes numéricas y lógicas es 0. El valor de relleno predeterminado de las imágenes categóricas es missing, que corresponde a la categoría <undefined>.

Tipo de imagen

Dimensionalidad de la transformación

Formato de los valores de relleno

Imagen 2D en escala de grises o lógica2D
  • Escalar numérico

Imagen 2D en escala de grises o 2d multiespectral2D
  • Escalar numérico

  • Vector numérico de c elementos que especifica un valor de relleno para cada uno de los c canales. El número de canales, c, es 3 para las imágenes en color.

Serie de p imágenes 2D2D

  • Escalar numérico

  • Matriz numérica de c por p. El número de canales, c, es 1 para las imágenes en escala de grises y 3 para las imágenes en color.

Imagen N D2D
  • Escalar numérico

  • Matriz numérica cuyo tamaño coincide con las dimensiones 3 a N de la imagen de entrada A. Por ejemplo, si A es 200 por 200 por 10 por 3, entonces FillValues puede ser una matriz de 10 por 3.

Imagen 3D en escala de grises o lógica3D
  • Escalar numérico

Imagen categórica2D o 3D
  • Categoría válida de la imagen, especificada como escalar de cadena o vector de caracteres.

  • missing, que corresponde a la categoría <undefined>. Para obtener más información, consulte missing.

Ejemplo: 255 rellena una imagen uint8 con píxeles blancos

Ejemplo: 1 rellena una imagen double con píxeles blancos

Ejemplo: [0 1 0] rellena una imagen en color double con píxeles verdes

Ejemplo: [0 1 0; 0 1 1]', para una serie de dos imágenes en color, double rellena la primera imagen con píxeles verdes y la segunda con píxeles cian

Ejemplo: "vehicle" rellena una imagen categórica con la categoría "vehículo"

Rellenado de la imagen para crear bordes suaves, especificado como true o false. Cuando se establece en true, imwarp crea un borde más suave en la imagen de salida rellenando la imagen de entrada con los valores especificados por FillValues. Cuando se establece en false, imwarp no rellena la imagen. Si se elige false (no rellenar) la imagen de entrada puede dar lugar a un borde más nítido en la imagen de salida. Este borde más nítido puede ser útil para minimizar las distorsiones de la costura cuando se registran dos imágenes una al lado de la otra.

Argumentos de salida

contraer todo

Imagen transformada, devuelta como arreglo numérico, lógico o categórico del mismo tipo de datos que la imagen de entrada A.

Información de referencia espacial de la imagen transformada, devuelta como un objeto de referencia espacial imref2d o imref3d.

Algoritmos

imwarp determina el valor de los píxeles de la imagen de salida mediante la asignación de ubicaciones en la imagen de salida a las ubicaciones correspondientes en la imagen de entrada (una asignación inversa). Cuando el centro de un píxel de la imagen de salida no coincide con el centro de un píxel de la imagen de entrada, imwarp interpola dentro de la imagen de entrada para calcular el valor del píxel de salida.

La figura ilustra una transformación de traslación de una imagen de damero, en la que cada cuadrado tiene 10 por 10 píxeles. Por convención, los ejes en el espacio de entrada se etiquetan como u y v y los ejes en el espacio de salida como x e y. Mediante la transformación inversa, el píxel con coordenadas (x,y) (25,35) en el espacio de coordenadas de salida se asigna a las coordenadas(u,v) (5,5) en el espacio de coordenadas de entrada.

Checkerboard image in input coordinate space and translated checkerboard image in output coordinate space

imwarp realiza la asignación utilizando coordenadas mundiales. Para obtener más información, consulte Image Coordinate Systems.

Capacidades ampliadas

Historial de versiones

Introducido en R2013a