# pad matrix to a particular size

88 views (last 30 days)
Elysi Cochin on 13 May 2021
Answered: Image Analyst on 13 May 2021
I have a matrix M of size m x n
m and n may or may not be equal - M can be rectangular or square matrix - where m and n are less than 150,
I wanted to resize M to 150 x 150 by padding border with zeros, such that the m x n will come in the center
how to compute value for x and y such that i can use the same line of code for any matrix,
or is there any another way to do?

Image Analyst on 13 May 2021
You can use the 'pre' and 'post' options to pad each side with the desired number of zeros.
Or use this "trick"
g = ones(150, 150); % Original matrix is 150 x 150
[rows, columns] = size(g);
m = 153
n = 152;
rowsPre = floor((m - rows)/2)
collsPre = floor((n - columns)/2)
% Pad it out with 334 rows top and bottom,
% and 281 columns left and right.
P = padarray(g, [rowsPre, collsPre], 0, 'both');
whos P % Originally 152x152 padded with zeros all around.
% Not the size we want yet. We want 153x152
% Here comes the "trick" to expand out the lower right corner with zeros.
P(m, n) = 0;
whos P % Now 153 x 152

David Hill on 13 May 2021
assuming m and n are both even.
Elysi Cochin on 13 May 2021
what if both are odd or any one value is odd
say 71 x 100
or 97 x 97
or 63 x 89