问题
I have an image of size 61x56 and I want to pad the image to size 392x392.
I am trying to use padarray
but since I get a non-integer value I am unable to do this. Can anyone help me with this. Thanks a lot! I have attached what I want to do below.
K = imread('test.jpg');
K = rgb2gray(K);
[m n] = size(K);
p = 392;
q = 392;
K_pad = padarray(K, [(p-m)/2 (q-n)/2], 'replicate');
回答1:
You can divide your padarray
instruction in two calls:
K_pad = padarray(K, [floor((p-m)/2) floor((q-n)/2)], 'replicate','post');
K_pad = padarray(K_pad, [ceil((p-m)/2) ceil((q-n)/2)], 'replicate','pre');
But you may want to check what is happening in the corners of the image to see if it is ok with what you want to do with it.
回答2:
Here's another way of padding it without using padarray
.
imgSize=size(img); %#img is your image matrix
finalSize=392;
padImg=zeros(finalSize);
padImg(finalSize/2+(1:imgSize(1))-floor(imgSize(1)/2),...
finalSize/2+(1:imgSize(2))-floor(imgSize(2)/2))=img;
回答3:
You can try this function:
function out1 = myresize(in1)
%% Sa1habibi@gmail.com
%% resize an image to closest power of 2
[m,n] = size(in1);
if(rem(m,2)~=0)
in1(1,:)=[];
end
if(rem(n,2)~=0)
in1(:,1)=[];
end
[m,n] = size(in1);
a = max(m,n);
if(log2(a)~=nextpow2(a) || m~=n)
s1 = 2^nextpow2(a);
n_row = (s1 - m)/2;
n_col = (s1 - n)/2;
dimension = [n_row,n_col];
out1 = padarray(in1,dimension);
end
end
for example:
A = ones(2,8);
out1 = myresize(A);
first it finds the maximum of rows and columns, then paddarray the matrix in both direction.
来源:https://stackoverflow.com/questions/6597187/padding-an-image-in-matlab