零填充缩放傅立叶

时间:2016-09-24 19:29:12

标签: image matlab image-processing octave

我正在尝试使用傅立叶实现零填充缩放。 我正在使用八度音,我无法在矩阵周围添加零。 结果(逆傅立叶变换后)非常暗。

我的目标: 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 个答案:

答案 0 :(得分:1)

不要使用for循环来复制矩阵。我会尝试类似的东西:

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