2012-12-07 66 views
4

我讀到的頻域高斯濾波器,但有幾點我不能在這裏明白:與高斯濾波器工作在頻域+ Matlab的

  1. 將高斯濾波器始終是一個方陣?

  2. 如果1的答案是肯定的,如果我的圖像是矩形矩陣會發生什麼?在Matlab中,我讀取圖像,然後使用fft2將其從空間域轉換到頻域,然後我使用ffshift來集中它。我想要的是將圖像的頻域矩陣乘以高斯濾波矩陣,然後使用ifft2將結果轉換爲空域,但由於高斯濾波矩陣和圖像的頻域矩陣大小不同,它們不能相乘一起。 (我在這裏並沒有使用conv2fspectial)。

+0

好,高斯濾波器通常以方格的定義,由於其各向同性,但是沒有什麼能夠阻止你裁剪它是一個矩形,圓形,星形,你的名字。現在,更常見的是,您可以定義適當的填充以匹配兩個支持區域。 – mmgp

+0

爲什麼不使用'conv2(image,guassian,'same')'? – bla

+0

我想試試它 – Xitrum

回答

2

高斯過濾器實際上是圓形的,因爲它是離中心距離的函數。使用矩形矩陣是因爲它更方便。
你可以爲了克服大小差異做的是零墊過濾:

img = imread(imgFileName); % read image, use gray-level images here. 
IMG = fft2(img); % Fourier of img 
sz = size(img); 
h = fspecial('gaussian', sz, sigma); % create a filter with std sigma same size as img 
H = fft2(h); % Fourier of filter 
F = IMG.*H; % filter in Fourier space 
f = ifft2(F); % back to spatial domain.