Mam wąskie gardło w dwuwymiarowym medianie filtra (okno 3x3) Używam bardzo dużego zestawu obrazów i chciałbym go zoptymalizować. Przetestowałem scipy.ndimage
median_filter, a także PIL
, scipy.signal
i scikits-image
. Przeglądając jednak w SO, dowiedziałem się, że istnieje szybki filtr medianowy O (n) w C (Median Filtering w Constant Time patrz Rolling median algorithm in C) i zastanawiałem się, czy mogę zaimplementować go w Pythonie za pomocą scipy.weave.inline? Jakieś sugestie dotyczące alternatywnej trasy?Używanie scipy.weave.inline do szybkiego filtrowania median 2D
Odpowiedz
Nie znam podstawowego algorytmu, ale obraz scikitów ma wartość rolling median filter.
W przeciwnym razie, polecam go napisać w Cython (język C/Python pidgin). Koniecznie sprawdź numer convolution example/tutorial pod kątem pracy z numpy tablicami.
Dzięki, zajrzę do tego. Ponadto, pisząc 3x3, miałem na myśli, że średni rozmiar okna to 3x3, a rzeczywisty obraz, w którym jest używany, ma rozmiar megapikseli. – bla
Wygląda na to, że sciki są wolniejsze od PIL i scipy.ndimage. Niestety, obrazy, nad którymi pracuję, są 16-bitowe, więc opcja 0..255 nie jest istotna. Dalej Cython ... – bla
Jeśli Reshape Twojego nadal zainteresowany będę próbować NumPy i mediana:
a= some big array
a.reshape(N,3,3) #N being specific to your array
[numpy.median(m) for m in a]
ja nie wiem jak to waga w porównaniu do metod testowałem, ale jeśli chcesz, aby zoptymalizować z C można zamocować na pętla na liście zrozumieniem ...
To jest eleganckie, ale niestety oblicza medianę każdego niepokrywającego się 3x3, a nie medianę wszystkich możliwych 3x3. –
Spróbuj tego: Rolling median in C - Turlach implementation
Zastosowanie:
Mediator* m = MediatorNew(9);
for (...)
{
MediatorInsert(m, value);
median = MediatorMedian(m);
}
Wierzę, że to jest taki sam jak R algo, ale czystsze (zaskakująco więc, w rzeczywistości).
Możesz go zawinąć lub przenieść i użyć Numba (lub Cython). Myślę, że poleciłbym Numba over Cython, jeśli nic innego, ponieważ to jest zwykły stary kod Pythona.
Proponuję dodanie tego do scikits, jeśli przebiega szybciej niż w scikits już :)
dzięki Alex, jeszcze tego nie próbowałem, ale wygląda obiecująco. – bla
- 1. Używanie OpenGL do 2D
- 2. Filtr Median Bardzo wydajna implementacja
- 3. Używanie DjangoObjectPermissionsFilter do filtrowania obiektów użytkownika za pomocą django-guardian
- 4. Używanie CoreImage do filtrowania obrazu powoduje obrót obrazu.
- 5. Dlaczego algorytm median-median nie może używać bloku wielkości 3?
- 6. Szybki sposób implementacji splotów 2D w C
- 7. Median filtr zamaskowanych macierzy
- 8. Median of Medians
- 9. kolekcje do filtrowania lambdaj
- 10. Używanie funkcji SciPy DCT do tworzenia 2D DCT-II
- 11. Wyjaśnienie algorytmu Median of Medians
- 12. Zapisywanie szybkiego słownika do pliku
- 13. Selector składnia do szybkiego 3,0
- 14. Wyrażenie Linq do filtrowania formcollection
- 15. Biblioteka Pythona do filtrowania XSS?
- 16. AWK do filtrowania plików CSV
- 17. Używanie indeksu auto neo4j w Cyprze WHERE klauzula filtrowania
- 18. Metoda Otsu i filtr Median w Pythonie
- 19. Ogólna metoda znajdowania median 3 wartości
- 20. sortowanie danych geograficznych do szybkiego wyszukiwania
- 21. Alternatywa dla słownika do szybkiego wyszukiwania kluczy?
- 22. jak dodać openssl do szybkiego projektu
- 23. Ustawienia sieci neuronowej do szybkiego szkolenia
- 24. Jak przekonwertować szybkiego String do CFString
- 25. Jak przekonwertować szybkiego Dictionary do NSDictionary
- 26. Scala - Najłatwiejsza grafika 2D do pisania na ekranie tablicy 2D?
- 27. skopiować jedną tablicę 2D do innego tablicy 2D
- 28. adnotacja do filtrowania wyników asocjacji @OneToMany
- 29. Konfiguracja nginx do filtrowania powodzi http
- 30. Używanie funkcji RegExp do dynamicznego tworzenia wyrażenia regularnego i filtrowania zawartości
Mam otoki Cython dla Perreault + Hebert, mediana Filtering w stałym czasie, gdzieś - ale to byłoby przesada na 3x3, lepiej zrobić sieć sortującą, 9 wejść w 25 porównaniach. Czy wejścia to 0..255 czy co? – denis
Czy chcesz przetworzyć swój zestaw obrazów? Czy [OpenCV] (http://opencv.org/) jest alternatywną trasą? [medianBlure] (http://docs.opencv.org/modules/imgproc/doc/filtering.html#medianblur) może? Masz również implementacje CUDA i OpenCl. – mfrellum
większość ram kodu jest już w python, małe części są w matlab, najlepiej jak zaimplementować tę część kodu w pythonie. – bla