如何垂直零填充图像matlab?

时间:2016-07-27 13:11:29

标签: image matlab padding zero

我想制作一个矩形图像,只需垂直零填充就可以使图像成方形。有什么办法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用图像处理工具箱功能padarray来完成此操作。您可以指定要在垂直或水平方向上填充的行数:

padarray(data, [vertical_padding, horizontal_padding])

因此,在您的情况下,要创建方形图像,您可以执行以下操作:

img = rand(20, 40);
padsize = (size(img, 2) - size(img, 1)) / 2

newimg = padarray(img, [padsize, 0]);

enter image description here

这假设顶部和底部的填充具有相同的大小。如果不是,则需要使用padarray两次分别填充顶部和底部。

答案 1 :(得分:2)

如果您没有图像处理工具箱,这仍然非常简单:

padsize = (size(img, 2) - size(img, 1)) / 2
pad = zeros(padsize, size(img,2));
newimg = [pad; img; pad]

注意,如果行数和列数之间的差异为奇数,则上述操作将失败。一种更强大的方法是:

padsize = floor((size(img, 2) - size(img, 1)) / 2)
pad = zeros(padsize, size(img,2));
extraLineWhenNeeded = zeros(mod(size(img, 2) - size(img, 1), 2) == 1 ,size(img,2)); % Note that extra line will have 0 rows if it's not needed i.e. when the difference between the number of rows and columns of img is even
newimg = [pad; img; pad; extraLineWhenNeeded]