As often happens, in MATLAB there are several ways to do this. I will give some examples for filling RGB images ...
Solution # 1: add padding with CAT to make a square image
padColor REPMAT, , , . CAT:
[r,c,d] = size(rgbImage); %
nPad = abs(c-r)/2; %
padColor = [1 1 1]; %
padColor = reshape(padColor,1,1,3); %
if c > r %
newImage = cat(1,repmat(padColor,floor(nPad),c),... %
rgbImage,... %
repmat(padColor,ceil(nPad),c)); %
elseif r > c %
newImage = cat(2,repmat(padColor,r,floor(nPad)),... %
rgbImage,... %
repmat(padColor,r,ceil(nPad))); %
end
indexed, , , padColor :
padColor = uint8(1); %
padColor = uint8(255); %
padColor = true; %
β2:
padColor REPMAT, . :
[r,c,d] = size(rgbImage); %
padColor = [1 1 1]; %
padColor = reshape(padColor,1,1,3); %
if c > r %
newImage = repmat(padColor,c); %
rowIndex = floor((c-r)/2); %
newImage(rowIndex+(1:r),:,:) = rgbImage; %
elseif r > c %
newImage = repmat(padColor,r); %
columnIndex = floor((r-c)/2); %
newImage(:,columnIndex+(1:c),:) = rgbImage; %
end
indexed, , , padColor :
padColor = uint8(1); %
padColor = uint8(255); %
padColor = true; %
PADARRAY, , . , RGB- (. ). , 'replicate', PADARRAY ,
[r,c,d] = size(rgbImage); %
nPad = abs(c-r)/2; %
if c > r %
newImage = padarray(rgbImage,[floor(nPad) 0],... %
'replicate','pre');
newImage = padarray(newImage,[ceil(nPad) 0],... %
'replicate','post');
elseif r > c %
newImage = padarray(rgbImage,[0 floor(nPad)],... %
'replicate','pre');
newImage = padarray(newImage,[0 ceil(nPad)],... %
'replicate','post');
end
indexed, , . 'replicate' , (.. uint8(255) ). RGB-, 'replicate' , , (.. 1 ).