2016-09-24 4 views
0

Я пытаюсь реализовать нулевое масштабирование с использованием Fourier. Я использую октаву, и я не могу добавить нули вокруг моей матрицы. Результат (после обратного преобразования Фурье) очень темный.zero padding zoom 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

Не используйте для петель для копирования матриц. Я хотел бы попробовать что-то вроде:

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

EDIT:

Btw, есть также функция 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

 Смежные вопросы

  • Нет связанных вопросов^_^