2011-07-06 13 views
4

画像のサイズが61x56で、サイズを392x392に設定したいと思います。MATLABでの画像の埋め込み

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

次の2回の呼び出しであなたの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'); 

しかし、あなたはそれが何をしたいとokですかどうかを確認するために、画像の隅で何が起こっているかを確認したいことがありへそれでやってください。

+0

ありがとうございます。それは完全に動作します。 – Sista

+0

これは、1つのメモリコピーでより効率的に実行できるのだろうかと思います。 – Royi

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; 
+0

うわー..これも動作します。このように接近することを考えたことはありません。ありがとうございました。 – Sista

+0

ゼロだけを埋めますか?もしあなたが 'replicate'機能を望んでいたら? – Royi

0

あなたはこの機能を試すことができます。たとえば

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 

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

は最初のそれは、行と列の最大値を見つけ、その後、両方の方向に行列をpaddarray。

関連する問題