如何在MATLAB中使用padarray填充图像以匹配另一个图像的大小

时间:2015-11-12 21:55:47

标签: image matlab image-processing

我正在尝试使用padarray来增加image2的大小,256 x 256的大小为image1,其大小为384 x 512 ,但我知道新的image3大小为1024 x 1280。为什么和出了什么问题?

这是我写的代码:

Image1 = rgb2gray(imread('pillsetc.png'));
Image2 = (imread('rice.png'));
[height1, width1] = size(Image1);
[height2, width2] = size(Image2);

image3 = padarray(Image2,[height1, width1]);

1 个答案:

答案 0 :(得分:2)

您的错误是因为您误解了padarray的工作原理。第二个元素指定要为每个维度沿图像边框填充的元素数。例如,执行out = padarray(im, [2 1]);将指定垂直2个零和水平1 0的边框。

示例:

>> im = [1 2; 3 4]

im =

     1     2
     3     4

>> padarray(im, [2 1])

ans =

     0     0     0     0
     0     0     0     0
     0     1     2     0
     0     3     4     0
     0     0     0     0
     0     0     0     0

请注意填充是对称的。因此,第一维中的2表示您在图像顶部和底部看到2像素零边框。第二维中的1表示您在图像的左侧和右侧看到1像素零边框。您正在指定总宽度和高度,这是不正确的。此外,如果您有彩色图像,width1width2实际上会变为width*3,其中width是任一图片的原始宽度。

如果要正确执行此操作,则需要计算图像宽度和高度的正确填充大小,并且还需要从两个图像中获取正确的宽度和高度:

Image1 = rgb2gray(imread('pillsetc.png'));
Image2 = (imread('rice.png'));
height1 = size(Image1,1); %// Change
width1 = size(Image1,2); %// Change
height2 = size(Image2,1); %// Change
width2 = size(Image2,2); %// Change

image3 = padarray(Image2,[(height1-height2)/2, (width1-width2)/2]); %// Change

height1-height2width1-width2找到高度和宽度的差异,这是两个维度中所需的零总数。但是,因为填充是对称,所以你需要做的是将每个值除以2,这样差异的一半在一侧有这么多的零,其余的则放在另一边。尺寸。实际上,您将较小的图像放在中心,并在图像的中心周围填充。另外,请记住,这仅适用于两个图像之间的均匀尺寸。如果你没有这个,你可能想要使用floor