2016-09-24 106 views
0

我試圖用fourier實現零填充縮放。 我正在使用八度,我不能在我的矩陣周圍添加零。 結果(逆傅里葉變換後)非常暗。零填充縮放fourier

我的目標: My goal

我的代碼:

I=double(imread('montagne.jpeg')); 
I = I/255; 
%%scaling factor 
facteur = 4; 
[m,n,r] = size(I); 
H=fft2(I); 
H = fftshift(H); 
%%the new image 
B = zeros(facteur*m,facteur*n,3); 
%%try to add zeros around my matrix 
%% r : rgb channels 
for r=1:3 
    for i=1:m 
    for j=1:n 
     B(i+((facteur*m)/4),j+((facteur*n)/4),r) = H(i,j,r); 
    end 
end 
end 

%% show the image 
B= ifftshift(B); 
final = ifft2(B); 
figure; 
imshow(final); 

有什麼建議?

回答

1

請勿使用for-loops複製矩陣。我會嘗試這樣的:

I = im2double (imread ('IMG_2793.JPG')); 
facteur = 4; %%scaling factor 
[m, n, r] = size (I); 
H = fftshift (fft2 (I)); 
B = zeros(facteur*m, facteur*n, 3); 

ms = round (m * (facteur/2 - 0.5)); 
ns = round (n * (facteur/2 - 0.5)); 

B(ms:(m+ms-1), ns:(n+ns-1), :) = H; 
final = abs (ifft2 (ifftshift (B))); 
figure; 
imshow(final * facteur^2); 

編輯:

順便說一下,也有功能padarray這你想要做什麼:

octave:1> padarray (magic(3), [1, 1]) 
ans = 

    0 0 0 0 0 
    0 8 1 6 0 
    0 3 5 7 0 
    0 4 9 2 0 
    0 0 0 0 0 
+0

我試過,但它不工作...圖像仍然黑暗,如果我添加「facteur^2」它太亮。 –

+0

我也試過了,它工作。所以也許你必須上傳你的圖片或者自己調整這個因子 – Andy