我有一个大小为 61x56 的图像,我想将图像填充为 392x392 大小。
我正在尝试使用padarray
,但由于我得到一个非整数值,我无法做到这一点。谁能帮我这个。非常感谢!我在下面附上了我想做的事情。
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');
我有一个大小为 61x56 的图像,我想将图像填充为 392x392 大小。
我正在尝试使用padarray
,但由于我得到一个非整数值,我无法做到这一点。谁能帮我这个。非常感谢!我在下面附上了我想做的事情。
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');
您可以将padarray
指令分为两个调用:
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');
但是您可能需要检查图像角落中发生的情况,以查看您想要对其执行的操作是否正常。
这是另一种不使用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;
你可以试试这个功能:
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
例如:
A = ones(2,8);
out1 = myresize(A);
首先它找到行和列的最大值,然后在两个方向上对矩阵进行 paddarray。