2011-08-09 19 views
5

Mam wektor n-wymiarowy (1xn dataset, i to nie są dane obrazu), i chcę zastosować do niego filtr Gaussa. Mam zestaw narzędzi do przetwarzania obrazu i kilka innych (zapytaj, czy potrzebujesz listy).Filtr Gaussa na wektorze w Matlab

Prawdopodobnie mogę ustawić parametr hsize funkcji podobny do [1 n]. Czy mogę nadal używać imfilter, aby zastosować go do mojego wektora jako kolejny krok, czy powinienem używać czegoś innego?

Widziałem już kilka przykładów, jak zastosować filtr Gaussa do dwuwymiarowych danych obrazu w Matlab, ale wciąż jestem stosunkowo nowy w Matlab jako platformie, więc przykład byłby naprawdę dobry.

Uwaga: Nie jestem obecnie w stanie po prostu wypróbować tego i zobaczyć, co się stanie (obecnie nie na komputerze z zainstalowanym Matlabem), w przeciwnym razie spróbowałbym go najpierw i tylko zapytał, czy napotkam problemy przy użyciu fspecial i imfilter.

Odpowiedz

15

Dlaczego sam nie utworzyć filtra Gaussa? Możesz zajrzeć na formuły w fspecial (lub jakiejkolwiek innej definicji Gaussa):

sigma = 5; 
sz = 30; % length of gaussFilter vector 
x = linspace(-sz/2, sz/2, sz); 
gaussFilter = exp(-x .^ 2/(2 * sigma^2)); 
gaussFilter = gaussFilter/sum (gaussFilter); % normalize 

i aby stosować go można użyć filter:

y = rand(500,1); 
yfilt = filter (gaussFilter,1, y); 

i nie zapomnij filtra ma opóźnienie, co oznacza, że ​​filtrowany sygnał jest przesunięty w stosunku do sygnału wejściowego. Ponieważ filtr ten jest symetryczny, można uzyskać non-przesunięty wyjście za pomocą conv zamiast filter, i wybierz opcję same:

yfilt = conv (y, gaussFilter, 'same'); 
+2

Cóż, tak naprawdę nie widzi potrzeby, aby napisać własną funkcję, jeśli inne istniejące funkcje wykonają zadanie równie dobrze, ale tak, samo utworzenie filtru rozwiązuje problem. Dzięki. Nawiasem mówiąc, czy mam rację, sądząc, że zwykle rozmiar wynosi 6 (plus-minus 3) razy wartość sigma? –

+1

To naprawdę zależy od aplikacji - ale generalnie chcesz, żeby ogonki Gaussa wymarły, więc obcięcie filtru nie ma znaczącego efektu (ponieważ ogony idą do 0 przy + -infinity, musisz przyciąć, aby mieć skończoną długość filtr). Tak więc, 4 lub więcej sigm na każdą stronę to gwarantuje. –

+2

Oczywiście istnieje potrzeba napisania własnej funkcji, zwłaszcza gdy jest to część kosztownego zestawu narzędzi! Co się stanie, jeśli liczba licencji Matlab Image Toolbox będzie skończona w twojej firmie lub na uniwersytecie? Zdarza się! – Wok