imwarp
Aplicar la transformación geométrica a una imagen
Sintaxis
Descripción
[
transforma una imagen con referencia espacial especificada por los datos de la imagen B
,RB
] = imwarp(A
,RA
,tform
)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(___,
especifica el tipo de interpolación que usar.interp
)
[___] = imwarp(___,
especifica argumentos de nombre-valor para controlar los diversos aspectos de la transformación geométrica. Name=Value
)
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
Aplicar estiramiento horizontal a la imagen
Lea una imagen en escala de grises y muéstrela.
I = imread('cameraman.tif');
imshow(I)
Cree un elemento estructurante afín 2D.
A = [1 0.5 0; 0 1 0; 0 0 1]; tform = affinetform2d(A);
Aplique la transformación a la imagen.
J = imwarp(I,tform); imshow(J)
Aplicar transformación de rotación a un conjunto de datos de RM 3D
Cargue y muestre una imagen volumétrica de RM 3D.
load("mri");
mriVolume = squeeze(D);
volshow(mriVolume);
Cree un objeto de transformación rígida 3D que rote la imagen alrededor del eje y.
theta = [0 22.5 0]; transl = [0 0 0]; tform = rigidtform3d(theta,transl);
Aplique la transformación a la imagen y muestre el resultado.
mriVolumeRotated = imwarp(mriVolume,tform); volshow(mriVolumeRotated);
Deformar una imagen utilizando diferentes estilos de vista de salida
Lea y muestre una imagen. Para ver las extensiones espaciales de la imagen, haga visibles los ejes.
A = imread("kobi.png"); A = imresize(A,0.25); iptsetpref("ImshowAxesVisible","on") imshow(A)
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");
imshow(BFollowOutput)
title("FollowOutput Bounds Style");
imshow(BSameAsInput)
title("SameAsInput Bounds Style");
iptsetpref("ImshowAxesVisible","off")
Argumentos de entrada
A
— Imagen que se desea transformar
Arreglo numérico | Arreglo lógico | Arreglo categórico
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
tform
— Transformación geométrica
objeto de transformación geométrica
Transformación geométrica, especificada como un objeto de transformación geométrica que aparece en la tabla.
Objeto de transformación geométrica | Descripción |
---|---|
Transformaciones geométricas lineales 2D | |
transltform2d | Transformación de traslación |
rigidtform2d | Transformación rígida: traslación y rotación |
simtform2d | Transformación de similitud: traslación, rotación y escalado isotrópico |
affinetform2d | Transformación afín: traslación, rotación, escalado anisotrópico, reflexión y cizallado |
projtform2d | Transformación proyectiva |
Transformaciones geométricas lineales 3D | |
transltform3d | Transformación de traslación |
rigidtform3d | Transformación rígida: traslación y rotación |
simtform3d | Transformación de similitud: traslación, rotación y escalado isotrópico |
affinetform3d | Transformación afín: traslación, rotación, escalado anisotrópico, reflexión y cizallado |
Transformaciones geométricas no lineales | |
geometricTransform2d | Transformación geométrica 2D |
geometricTransform3d | Transformación geométrica 3D |
PolynomialTransformation2D | Transformación polinómica |
PiecewiseLinearTransformation2D | Transformación lineal a trozos |
LocalWeightedMeanTransformation2D | Transformación local media ponderada |
Si
tform
es 2D yA
tiene más de dos dimensiones, como en el caso de una imagen RGB, entoncesimwarp
aplica la misma transformación 2D a todos los planos 2D a lo largo de las dimensiones superiores.Si
tform
es 3D, entoncesA
debe ser una imagen de volumen 3D.
Nota
También puede especificar tform
como un objeto de tipo rigid2d
, rigid3d
, affine2d
, affine3d
o projective2d
. No obstante, estos objetos no están recomendados. Para obtener más información, consulte Historial de versiones.
D
— Campo de desplazamiento
Arreglo numérico
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 enD
para producir ubicaciones reasignadas enA
. Del mismo modoD(:,:,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 especificaD
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 modoD(:,:,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 enD
para producir ubicaciones reasignadas enA
. De la misma manera,D(:,:,:,2)
yD(:,:,:,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
interp
— Tipo de interpolación utilizada
"nearest"
| "linear"
| "cubic"
Tipo de interpolación utilizada, especificado como uno de estos valores.
Método de interpolación | Descripción |
---|---|
"nearest" | Interpolación del vecino 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 vecino 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. La interpolación lineal 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
OutputView
— Tamaño y ubicación de la imagen de salida
objeto imref2d
| objeto imref3d
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
.
FillValues
— Valor de relleno
Escalar numérico | Arreglo numérico | escalar de cadena | vector de caracteres | missing
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ógica | 2D |
|
Imagen 2D en escala de grises o 2d multiespectral | 2D |
|
Serie de p imágenes 2D | 2D |
|
Imagen N D | 2D |
|
Imagen 3D en escala de grises o lógica | 3D |
|
Imagen categórica | 2D o 3D |
|
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"
SmoothEdges
— Rellenado de la imagen para crear bordes suaves
false
(predeterminado) | true
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
B
— Imagen transformada
Arreglo numérico | Arreglo lógico | Arreglo categórico
Imagen transformada, devuelta como arreglo numérico, lógico o categórico del mismo tipo de datos que la imagen de entrada A
.
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.
imwarp
realiza la asignación utilizando coordenadas mundiales. Para obtener más información, consulte Sistemas de coordenadas de imagen.
Capacidades ampliadas
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
imwarp
es compatible con la generación de código C (requiere MATLAB® Coder™). Tenga en cuenta que, si selecciona la plataforma objetivo genéricaMATLAB Host Computer
,imwarp
genera código que utiliza una biblioteca compartida precompilada específica de la plataforma. El uso de una biblioteca compartida mantiene las optimizaciones de rendimiento, pero limita las plataformas objetivo para las que se puede generar código. Para obtener más información, consulte Types of Code Generation Support in Image Processing Toolbox.Las imágenes de entrada del tipo de datos
categorical
no son compatibles.La entrada del objeto de transformación geométrica,
tform
, debe representar una transformación geométrica lineal 2D o 3D.El método de interpolación y los nombres de los parámetros opcionales deben ser constantes en tiempo de compilación.
Generación de código de GPU
Genere código CUDA® para GPU NVIDIA® mediante GPU Coder™.
Notas y limitaciones de uso:
Las imágenes de entrada de tipo de datos categóricos no son compatibles.
La entrada del objeto de transformación geométrica
tform
debe representar una transformación geométrica 2D.El método de interpolación y los nombres de los parámetros opcionales deben ser constantes.
La salida de información de referencia espacial,
RB
, no es compatible.
Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool
o acelere código con Parallel Computing Toolbox™ ThreadPool
.
Esta función es totalmente compatible con los entornos basados en hilos. Para obtener más información, consulte Ejecutar funciones de MATLAB en un entorno basado en subprocesos.
Arreglos GPU
Acelere código mediante la ejecución en una unidad de procesamiento gráfico (GPU) mediante Parallel Computing Toolbox™.
Notas y limitaciones de uso:
Solo son compatibles los tipos de interpolación
"nearest"
y"linear"
.El argumento
SmoothEdges
debe serfalse
.Las transformaciones geométricas no lineales no son compatibles.
Para obtener más información, consulte Procesamiento de imágenes en una GPU.
Historial de versiones
Introducido en R2013aR2024a: Generar código C para transformaciones lineales 3D
Ahora puede generar código C cuando tform
sea una transformación geométrica lineal 3D.
R2022b: Compatibilidad de los nuevos objetos de transformación geométrica
A partir de la versión R2022b, la mayoría de funciones de Image Processing Toolbox™ crean y realizan transformaciones geométricas utilizando la convención de la premultiplicación. En consecuencia, ahora puede especificar tform
como un objeto de transformación geométrica que utiliza una convención de premultiplicación, como un objeto affinetform2d
.
A pesar de que aún puede especificar tform
como un objeto de transformación geométrica que utiliza una convención de posmultiplicación, como un objeto affine2d
, estos objetos no están recomendados. Puede simplificar sus flujos de transformación geométrica cambiando a los nuevos objetos de transformación geométrica de premultiplicación. Para obtener más información, consulte Migrate Geometric Transformations to Premultiply Convention.
R2021b: Compatibilidad con entornos basados en hilos
Ahora imwarp
es compatible con los entornos basados en hilos.
R2021a: Compatibilidad mejorada con la aceleración por GPU
La función imwarp
, que ya es compatible con la aceleración por GPU, ahora extiende su compatibilidad para incluir el uso de campos de desplazamiento.
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)