在MATLAB中填充图像

时间:2011-07-06 13:28:24

标签: image matlab image-processing pad

我的图片大小为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');

4 个答案:

答案 0 :(得分:5)

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

但是你可能想要查看图像角落里发生的事情,看看你想用它做什么就好了。

答案 1 :(得分:5)

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

答案 2 :(得分: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);

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

答案 3 :(得分:0)

我在matlab文档中发现了此问题,该文档更加简洁

gcam = (imread('cameraman.tif'));
padcam = padarray(gcam,[50 50],'both');
imshow(padcam)

它也可以在gpu中进行较小的更改,这对于大图像来说更快

gcam = gpuArray(imread('cameraman.tif'));
padcam = padarray(gcam,[50 50],'both');
imshow(padcam)