Matlab中imfreqfilt函式,其用法同空間域濾波時使用的imfilter函式類似,調用時需要提供原始圖像和與原圖像等大的頻域濾波器作為參數,函式的輸出為經過濾波處理又反變換回空間域之後的圖像。
function out = imfreqfilt(I, ff)
% imfreqfilt函式 對灰度圖像進行頻域濾波
% 參數I 輸入的空域圖像
% 參數ff 套用的與原圖像等大的頻域濾鏡
if (ndims(I)==3) && (size(I,3)==3) % RGB圖像
I = rgb2gray(I);
end
if (size(I) ~= size(ff))
msg1 = sprintf('%s: 濾鏡與原圖像不等大,檢查輸入', mfilename);
msg2 = sprintf('%s: 濾波操作已經取消', mfilename);
eid = sprintf('Images:%s:ImageSizeNotEqual',mfilename);
error(eid,'%s %s',msg1,msg2);
end
% 快速傅立葉變換
f = fft2(double(I));
% 移動原點
s = fftshift(f);
% 套用濾鏡及反變換
out = s .* ff; %對應元素相乘實現頻域濾波
out = ifftshift(out);
out = ifft2(out);
% 求模值
out = abs(out);
% 歸一化以便顯示
out = out/max(out(:));