2014-12-09 6 views
1

Я хочу, чтобы применить следующий фильтр к изображению:Фильтрация изображения в области DFT в MATLAB

h = [1/4 1/16 1/4; 
    1/16 1/8 1/16; 
    1/4 1/16 1/4;] 

Я следовать шагам, описанным ниже, но я не получаю правильный результат. Может кто-нибудь мне помочь? Я не могу найти, что не так с моими шагами. Вот код:

I = imread('cameraman512.jpg'); 
h = [1/4 1/16 1/4; 1/16 1/8 1/16; 1/4 1/16 1/4;] 

%padding image 
Ip = padarray(I,[512 512],'post'); 
figure(); 
imshow(Ip); 

%padding filter 
Hp = padarray(h,[512 512],'post'); 
figure(); 
imshow(Hp); 

%image fourier 
dftI = fft2(I); 
figure(); 
imshow(dftI); 

% filter fourier 
dftH = fft2(H); 
figure(); 
imshow(dftH); 

%shifting image and filter 
I = fftshift(Ip); 
figure(); 
imshow(I,[]); 

H = fftshift(Hp); 
figure(); 
imshow(H,[]); 

G = dftI.*dftH; 
figure(); 
imshow(G); 

g=real(ifft2(G)); 
figure(); 
imshow(G); 
+0

я должен применить ч фильтр моего изображения и показать все изображения, шаг за шагом, но я думаю, что я совершил ошибку и окончательное изображение не является решающим – athinatha

+0

Посмотрите http://stackoverflow.com/questions/9583486/how-to-apply-a-filter-in-matlab – macduff

+0

@macduff OP хочет применить фильтрацию в частотной области, вероятно, для задания. –

ответ

3

Мне кажется, что у вас есть немного работы, чтобы сделать, чтобы понять, что вы просили в этом назначении. Вот пример кода, чтобы вы начали.

Вычисление ДПФ как изображения, так и фильтра:

dftI = fft2(I); 
dftH = fft2(h, 512, 512); 

Обратите внимание, что fft2 имеет встроенный в функции заполнения, то есть то, что 512 аргументов о.


Редактировать альтернатива набивка на @OliverCharlesworth комментарий

dftI = fft2(I, size(I,1)+size(h,1)-1, size(I,2)+size(h,2)-1); 
dftH = fft2(h, size(I,1)+size(h,1)-1, size(I,2)+size(h,2)-1); 

Окончательное изображение должно быть обрезаны соответствующим образом.


Если вы хотите, чтобы отобразить величины в ДПФЕ, с частотой нулевой в середине, вы можете использовать fftshift таким образом (я показываю их в логарифмическом масштабе для ясности):

subplot(1,2,1), imshow(log10(abs(fftshift(dftI))), []) 
subplot(1,2,2), imshow(log10(abs(fftshift(dftH))), []) 

DFTs

Поскольку сверток в пространственной области эквивалентны умножения в частотной области (с обычными ограничениями, линейность и т.д.), вы можете умножить ДПФ:

G = dftH .* dftI; 
imfilt = ifft2(G); 

Результат на картинке:

 Original       Filtered 

Results

+0

Обратите внимание, что это вызовет круговую свертку (для чистой фильтрации оба должны быть дополнены сначала N + M-1) , –