Filtracja Splotowa: Obliczenia i Przykład w Pythonie
- Szczegóły
Widzenie maszynowe to fascynująca i błyskawicznie rozwijająca się dziedzina techniki.
Pozwala wyposażyć systemy techniczne w takie możliwości jak automatyczna analiza tekstu, generowanie rozszerzonej rzeczywistości czy rozpoznawanie twarzy.
Obecnie najwygodniejszym narzędziem do rozwiązywania wymienionych problemów wydaje się być Python.
Siłą Pythona w budowaniu systemów widzenia maszynowego jest dostęp do mnóstwa przydatnych pakietów.
Żeby nie instalować każdego z nich osobno można zainstalować gotową dystrybucję Pythona o nazwie Anaconda.
Przeczytaj także: Definicja i pomiar filtracji kłębuszkowej
Wszystkie przykłady, które będziemy analizować można ściągnąć w formie notatnika Jupytera.
Możesz pracować w tym notatniku lub utworzyć nowy.
Możesz też utworzyć skrypt Pythona w dowolnym edytorze tekstu i uruchomić go z konsoli systemu operacyjnego.
Pamiętaj, że inaczej będzie się wtedy zachowywać biblioteka Matplotlib, której będziemy używać do wyświetlania obrazów.
Biblioteki, z których korzystamy to:
Przeczytaj także: Webber AP8400 - wymiana filtrów
- NumPy - jest to bardzo przydatna i bardzo popularna biblioteka do obliczeń numerycznych. Bazuje na niej też dużo bibliotek do analizy danych, uczenia maszynowego, sztucznej inteligencji czy właśnie przetwarzania obrazów.
- PIL (Python Image Library) - biblioteka zawierające różne funkcje do przetwarzania obrazów. Jest mniej popularna od np. OpenCV, ale instaluje się razem z Anacondą, więc na razie z niej skorzystamy. Będzie nam potrzebna tylko do wczytania obrazu z dysku.
- Matplotlib - biblioteka zawierająca różne przydatne funkcje do rysowania obrazów i wykresów. W swojej składni stara się bazować na funkcjach znanych z MATLABa.
- SciPy signal processing - moduł wchodzący w skład biblioteki SciPy. Zawiera funkcję do cyfrowego przetwarzania sygnałów.
Proste Operacje na Obrazach
W pierwszej linii wczytujemy obraz za pomocą biblioteki PIL. Jako argument do funkcji open musisz podać oczywiście swoją ścieżkę do obrazu.
W drugiej linii formatujemy obraz wczytany przez PIL tworząc obiekt klasy Ndarray używanej przez NumPy.
W trzeciej linii wyświetlamy obraz za pomocą biblioteki Matplotlib.
Wywołaniu funkcji show() w ostatniej linii wyświetli obraz.
Obrazy w Skali Szarości
W wielu zastosowaniach operuje się na obrazach w skali szarości.
Przeczytaj także: Optymalne rozcieńczenie bimbru
Obraz kolorowy jest reprezentowany w naszym przykładzie jako trójwymiarowa tablica, w której pierwszy wymiar oznacza numer wiersza, drugi numer kolumny, a trzeci numer jednego z trzech kanałów koloru (czerwony, zielony lub niebieski).
Żeby wygenerować obraz w skali szarości możemy np. W pierwszej linii wykorzystujemy funkcję mean to uśrednienia obrazu.
Argument axis=2 oznacza, że uśrednianie przeprowadzamy po trzecim wymiarze (pierwszy wymiar ma numer 0), który jak już wiemy oznacza kanał koloru.
Argument cmap=’gray’ spowoduje, że Matplotlib nie zastosuje tzw.
Progowanie Obrazu
Innym przykładem prostej operacji na obrazie jest jego progowanie.
Zamieniamy nasz obraz, którego piksele mogą przyjmować wartości od 0 do 255 na obraz, którego piksele przyjmują tylko jedną z dwóch wartości (tzw. obraz binarny).
Możemy przyjąć, że wszystkie piksele o wartościach powyżej pewnej liczby przyjmą w naszym obrazie binarnym wartość 1, a pozostałe wartość 0.
Jako próg przyjęliśmy tutaj wartość 160.
W naszym przykładzie pozwala ona mniej więcej oddzielić niebo od reszty obrazu.
Filtracja Splotowa Obrazu
Na koniec wykonamy filtrację splotową obrazu.
Sama filtracja splotowa ma bardzo wiele zastosowań i stanowi jedną z podstawowych technik przetwarzania obrazu.
Jest to jednak temat bardzo szeroki i nie będziemy się w niego wgłębiać.
Wykonamy tylko prosty przykład wykorzystania biblioteki Scipy do rozmycia obrazu.
Ponieważ o filtracji splotowej można się rozpisać bardzo szeroko to nie będę wyjaśniał kodu powyżej, dodałem do niego tylko trochę komentarzy.
W podejściu praktycznym filtracja splotowa obrazu wymaga od nas dwóch elementów wejściowych: jednym jest obraz filtrowany, drugim maska filtru z jakim chcemy dokonać splotu.
Jako, że rozmiar naszej maski wynosi 3×3 to takie samo otoczenie naszego piksela będzie musiało brać udział w wyliczaniu wartości splotu.
Najczęściej filtry, których suma jest większa niż 0 to filtry rozmywające, a te sumujące się do 0 to filtry krawędziowe.
Problem pojawia się przy brzegach obrazu, ponieważ nie ma możliwości nałożenia maski na piksele bliżej krawędzi obrazu, dlatego należy wprowadzić jedną z dwóch metod powielania pikseli brzegowych.
Wszytko zależy od maski, a dokładniej od tego, który jej element przyjmujemy jako jej środek.
Znając rozmiar rozmiary o jakie należy powiększyć posiadany obraz można zbudować nowy obraz poprzez np, budując nową macierz obrazu w taki sposób …, gdzie macierze od A do H są macierzami o które należy poszerzyć obraz oryginalny i wypełnionymi właściwymi danymi.
Przed testami proszę zwrócić uwagę, że prawie wszystkie zestawy masek posiadają różne warianty kierunkowe, należy dodatkowo dokonać złożenia otrzymanych wyników np. poprzez pierwiastek sumy kwadratu poszczególnych wyników lub średnią wartość bezwzględna dla nich.
tags: #filtracja #splotowa #obliczenia #przykład

