如何垂直零填充图像matlab?

How to vertical zero padding an image matlab?

我想将矩形图像制作成正方形图像,只使用垂直零填充。有什么办法吗?

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

padarray(data, [vertical_padding, horizontal_padding])

所以在你的例子中,要创建一个方形图像,你可以这样做:

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

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

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

万一您没有图像处理工具箱,这仍然很简单:

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]