MATLAB中的图像填充

8
我有一张大小为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');
3个回答

6
您可以将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');

但是您可能需要检查图像的角落,以确定它是否符合您想要进行的操作。


我想知道是否可以只使用一次内存复制来更高效地完成它。 - Royi

6

这里有另外一种不使用 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;

它只会用零填充吗?如果你想要“复制”功能怎么办? - Royi
@4Oh4请不要编辑他人的代码。相反,留下评论说明为什么你认为它应该被更改。原始发布者可能有特定的目的编写这段代码,未经他们的批准不应更改。 - Adriaan

0
你可以尝试这个函数:
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);

首先找到行和列的最大值,然后在两个方向上对矩阵进行填充。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接