在特定情况下调整图像大小

时间:2014-03-26 09:22:56

标签: image-processing matlab

我有一张大小为260 x 260像素的图片。我知道如何将其大小调整为140 x 140像素,然后将其转换为灰度。让我们假设下面的matlab代码:

image = imread('my_image.jpg');
image_resized = imresize(image, [140 140]);
size(image_resized) % 140 x 140 x 3
image_gray = rgb2gray(image_resized);
size(image_gray) % 140 x 140

我想要的是具体案例。我有兴趣将图像标准化为 140像素的高度,其中宽度相应地重新调整,以保持图像宽高比。不幸的是,我不知道如何编辑上面的代码。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用NaN作为所需的大小参数来表明您想要的内容

image_resized = imresize( image, [140 NaN] );

这基本上告诉了Matlab"不要打扰我的图像宽度 - 自己弄明白!"。

有关详细信息,请参阅imresize文档。

答案 1 :(得分:1)

试试这个 -

image = imread('my_image.jpg');
desired_height = 140;

%%// Width of the resized image keeping the aspect ratio same as before
n2 = round((size(image,2)/size(image,1))*desired_height);

%%// Resized image
image_resized = imresize(image, [desired_height n2]);

修改1

注意:另外,您也可以按照Shai的解决方案的建议使用NaN imresize规定的大小,但是ceils或者将大小调整为最小值在大多数情况下都不想要。

为了证明这种情况,我尝试imresize将高度保持为173,我通过手动调整大小来调整大小,而不是让imresize决定大小。

用于实验的代码

%%// Resized image
image_resized_with_auto_sizing  = imresize(image, [desired_height NaN]);
image_resized_with_manual_sizing  = imresize(image, [desired_height n2]);

我的实验的尺寸输出 -

>> whos image_resized_with_manual_sizing image_resized_with_auto_sizing
  Name                                    Size               Bytes  Class    Attributes

  image_resized_with_auto_sizing        173x185x3            96015  uint8              
  image_resized_with_manual_sizing      173x184x3            95496  uint8   

注意两种情况的宽度差异。这个问题也在讨论here