2011-07-06 105 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

您可以將您的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

非常感謝。它完美的作品。 – Sista

+0

我不知道只有一個內存拷貝可以更有效地完成。 – 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

它只填充零嗎?如果你想要'複製'功能呢? – 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在這兩個方向上的矩陣。