Używam python do utworzenia filtru gaussowskiego o rozmiarze 5x5. Widziałem ten post here, gdzie mówią o podobnej rzeczy, ale nie znalazłem dokładny sposób, aby uzyskać równoważny kod Pythona do funkcji Matlab fspecial('gaussian', f_wid, sigma)
Czy jest jakiś inny sposób to zrobić? Próbowałem za pomocą następującego kodu:Jak uzyskać filtr Gaussa w pythonie
size = 2
sizey = None
size = int(size)
if not sizey:
sizey = size
else:
sizey = int(sizey)
x, y = scipy.mgrid[-size: size + 1, -sizey: sizey + 1]
g = scipy.exp(- (x ** 2/float(size) + y ** 2/float(sizey)))
print g/np.sqrt(2 * np.pi)
Otrzymany wyjście jest
[[ 0.00730688 0.03274718 0.05399097 0.03274718 0.00730688]
[ 0.03274718 0.14676266 0.24197072 0.14676266 0.03274718]
[ 0.05399097 0.24197072 0.39894228 0.24197072 0.05399097]
[ 0.03274718 0.14676266 0.24197072 0.14676266 0.03274718]
[ 0.00730688 0.03274718 0.05399097 0.03274718 0.00730688]]
Co chcę jest coś takiego:
0.0029690 0.0133062 0.0219382 0.0133062 0.0029690
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.0219382 0.0983203 0.1621028 0.0983203 0.0219382
0.0133062 0.0596343 0.0983203 0.0596343 0.0133062
0.0029690 0.0133062 0.0219382 0.0133062 0.0029690
możliwe duplikat [Tworzenie Gaussa filtra wymaganej długości, pyton] (http://stackoverflow.com/questions/11209115/tworzenie-gaussowskich filtrów o wymaganej długości w pythonie) i http: // astrolitte rbox.blogspot.co.uk/2012/04/creating-discrete-gaussian-kernel-with.html – YXD
Używam kodu wspomnianego na blogu. Ustawić 'n = 2, a = 1 ' sigma i użyć tego kodu: ' rozmiar = 2 sizey = nie wielkość = int (rozmiar) jeśli nie sizey: sizey = rozmiar innego: sizey = Int (sizey) x, y = scipy.mgrid [-size: size + 1, -sizey: sizey + 1] g = scipy.exp (- (x ** 2/float (rozmiar) + y ** 2/float (sizey))/2) print g/np.sqrt (2 * np.pi) ' Ale uzyskany tutaj wynik jest inny niż uzyskany przy użyciu fspecial w matlab – Khushboo
Jak to jest inne? Czego oczekujesz i co otrzymujesz? – interjay