2011-07-06 2 views
4

J'ai une image de taille 61x56 et je veux remplir l'image à la taille 392x392.Rembourrage d'une image dans MATLAB

J'essaye d'employer padarray mais puisque j'obtiens une valeur non-entière je ne peux pas faire ceci. Est-ce que quelqu'un peut m'aider avec ça. Merci beaucoup! J'ai joint ce que je veux faire ci-dessous.

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

Répondre

3

Vous pouvez diviser votre instruction padarray en deux appels:

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

Mais vous pouvez vérifier ce qui se passe pour voir dans les coins de l'image si elle est ok avec ce que vous voulez fais avec.

+0

Merci beaucoup. Cela fonctionne parfaitement. – Sista

+0

Je me demande si cela peut être fait plus efficacement avec une seule copie de la mémoire. – Royi

5

Voici une autre façon de le rembourrer sans utiliser 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; 
+0

Wow .. cela fonctionne aussi. Je n'ai jamais pensé à l'aborder de cette façon. Je vous remercie. – Sista

+0

Sera-t-il seulement rempli de zéros? Et si vous vouliez la fonctionnalité 'replicate'? – Royi

0

Vous pouvez essayer cette fonction:

function out1 = myresize(in1) 
%% [email protected] 
%% 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 

par exemple:

A = ones(2,8); 
out1 = myresize(A); 

D'abord, il trouve le maximum de lignes et de colonnes, paddarray alors la matrice dans les deux sens.