将矩形图像调整为方形图像
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
我有一张图片,尺寸为 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
.
要添加页边距,您必须了解添加页边距的位置(顶部和底部或左侧和右侧)。
此外,由于 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