Contenido principal

Redimensionar una imagen y conservar la relación de aspecto

En este ejemplo se muestra cómo redimensionar una imagen manteniendo la relación entre anchura y altura. En este ejemplo se describen dos situaciones habituales:

  1. Desea redimensionar la imagen y especificar la altura o anchura exactas.

  2. Desea redimensionar una imagen para que sea lo más grande posible sin que la anchura y la altura superen un valor máximo.

Empiece leyendo y mostrando una imagen.

I = imread("lighthouse.png");
imshow(I)

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

Obtenga el tamaño de la imagen. La relación de aspecto de esta imagen es 3:4, lo que significa que la anchura es 3/4 de la altura.

[heightI,widthI,~] = size(I)
heightI = 
640
widthI = 
480

Redimensionar una imagen a una altura especificada

Especifique la altura deseada de la imagen.

targetHeight = 300;

Redimensione la imagen especificando el tamaño de salida de la imagen. Dado que el segundo elemento de targetSize es NaN, imresize calcula automáticamente el número de filas necesarias para mantener la relación de aspecto.

targetSize = [targetHeight NaN];
J = imresize(I,targetSize);
[h,w,~] = size(J)
h = 
300
w = 
225
imshow(J)

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

Redimensionar una imagen a una anchura especificada

Especifique la anchura deseada de la imagen.

targetWidth = 300;

Redimensione la imagen especificando el tamaño de salida de la imagen. Dado que el primer elemento de targetSize es NaN, imresize calcula automáticamente el número de columnas necesarias para mantener la relación de aspecto.

targetSize = [NaN targetWidth];
K = imresize(I,targetSize);
[h,w,~] = size(K)
h = 
400
w = 
300
imshow(K)

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

Redimensionar una imagen dentro del tamaño máximo

Puede redimensionar una imagen para que sea lo más grande posible sin que la anchura y la altura superen un valor máximo.

Especifique las dimensiones máximas de la imagen.

maxHeight = 256;
maxWidth = 256;

Determine qué dimensión requiere un factor de escala mayor.

scaleWidth = widthI/maxWidth
scaleWidth = 
1.8750
scaleHeight = heightI/maxHeight
scaleHeight = 
2.5000

Seleccione el tamaño de salida en función de si la altura o la anchura requieren un factor escalar mayor para que se ajusten a las dimensiones máximas de la imagen. Si la altura requiere un factor escalar mayor, especifique la altura objetivo como maxHeight. Por el contrario, si la anchura requiere un factor escalar mayor, especifique la anchura objetivo como maxWidth. Permita que imresize calcule automáticamente el tamaño de la otra dimensión para mantener la relación de aspecto.

if scaleHeight>scaleWidth
    targetSize = [maxHeight NaN];
else
    targetSize = [NaN maxWidth];
end

Redimensione la imagen especificando el tamaño de salida de la imagen.

L = imresize(I,targetSize);
[h,w,~] = size(L)
h = 
256
w = 
192
imshow(L)

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

Consulte también

Temas