2016-07-27 59 views

回答

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来分别填充顶部和底部。

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]