MATLAB Answers

pad matrix to a particular size

75 ビュー (過去 30 日間)
Elysi Cochin
Elysi Cochin 2021 年 5 月 13 日
回答済み: Image Analyst 2021 年 5 月 13 日
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
M_resized = padarray(M,[x y],0,'both');
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
Image Analyst 2021 年 5 月 13 日
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

その他の回答 (1 件)

David Hill
David Hill 2021 年 5 月 13 日
assuming m and n are both even.
M_resized=padarray(M,[(150-size(M,1))/2 (150-size(M,2))/2],0,'both');
  1 件のコメント
Elysi Cochin
Elysi Cochin 2021 年 5 月 13 日
what if both are odd or any one value is odd
say 71 x 100
or 97 x 97
or 63 x 89

サインインしてコメントする。

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by