将矩形图像调整为方形图像

Re-sizing a rectangular image to a square image

我有一张图片,尺寸为 213 x 145 像素。例如,我想将它的大小调整为 128 x 128 像素。我已经尝试过以下代码:

i = imread ('alif1.png');
I = imresize (i, [128 128], 'bilinear');

OR
i = imread ('alif1.png');
I = imresize (i, [128 128], 'lanczos3');

它给了我一个方形图像,但图像变得不成比例。但是,我相信宽高比得以保留。 我想在不扭曲或拉伸图像的情况下将图像调整为方形,而不是 pad/crop 白色背景。我仍然无法找出正确的代码。希望大家帮帮忙。

I = imread('alifi.png');
Crop image, specifying crop rectangle.

I2 = imcrop(I,[75 68 128 128]);

裁剪矩形的大小和位置,指定为 [xmin ymin width height].

形式的四元素位置向量

要了解更多信息,请点击 this(matlab ) and this(blog) 链接。

如果你想调整(而不是裁剪)图像的大小并保持纵横比(这样你就不会丢失图像的任何部分并且它不会变形),你可以先添加边距来制作图像平方。

您可以使用函数 padarray 实现此目的,或者只创建一个新的零图像,然后将图像添加到适当的坐标中。

一旦您的图像被调整为方形,您可以使用 imresize.

将其调整为 128x128

要添加页边距,您必须了解添加页边距的位置(顶部和底部或左侧和右侧)。 此外,由于 padarray 在两侧添加相同数量的边距,因此您必须检查所需的数字是否为偶数。如果它很奇怪,首先在你的图像中添加最后一行(或一列)零。

所以基本上你有三个选择:

  • 通过不保留宽高比(这是您已经尝试过的)使图像呈正方形

  • 按照@ShvetChakra 和@bla 的建议裁剪图像(但您会丢失一些图像信息)

  • 为图像添加边距并调整大小(但您最终会得到带边距的方形图像)

    魔法不存在,所以“你必须选择,但要明智地选择”

(引自印第安纳琼斯和最后的十字军东征)。

编辑:

% Example with a 5x2 image, so an extra column will be added 
% in order to use padarray.
im = [1 2; 3 4; 5 6; 7 8; 9 10];

nrows = size(a,1);
ncols = size(a,2);

d = abs(ncols-nrows);    % difference between ncols and nrows:
if(mod(d,2) == 1)        % if difference is an odd number
    if (ncols > nrows)   % we add a row at the end
        im = [im; zeros(1, ncols)];
        nrows = nrows + 1;
    else                 % we add a col at the end
        im = [im zeros(nrows, 1)];
        ncols = ncols + 1;
    end
end

if ncols > nrows
    im = padarray(im, [(ncols-nrows)/2 0]);
else
    im = padarray(im, [0 (nrows-ncols)/2]);
end

% Here im is a 5x5 matix, not perfectly centered 
% because we added an odd number of columns: 3