Дополнение изображения в MATLAB - PullRequest
7 голосов
/ 06 июля 2011

У меня есть изображение размером 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 голосов
/ 06 июля 2011

Вот еще один способ дополнить его без использования 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;
5 голосов
/ 06 июля 2011

Вы можете разделить вашу инструкцию 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');

Но вы можете проверить, что происходит в углах изображения, чтобы увидеть, в порядке ли это с тем, что вы хотитеделать с этим.

0 голосов
/ 30 июня 2017

Вы можете попробовать эту функцию:

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);

сначала он находит максимум строк и столбцов, затем добавляет матрицу в обоих направлениях.

...