我正在尝试使用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]);
答案 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像素零边框。您正在指定总宽度和高度,这是不正确的。此外,如果您有彩色图像,width1
和width2
实际上会变为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-height2
和width1-width2
找到高度和宽度的差异,这是两个维度中所需的零总数。但是,因为填充是对称,所以你需要做的是将每个值除以2,这样差异的一半在一侧有这么多的零,其余的则放在另一边。尺寸。实际上,您将较小的图像放在中心,并在图像的中心周围填充。另外,请记住,这仅适用于两个图像之间的均匀尺寸。如果你没有这个,你可能想要使用floor
。