W mojej klasie muszę utworzyć aplikację przy użyciu dwóch klasyfikatorów, aby zdecydować, czy obiekt na obrazie jest przykładem phylum porifera (seasponge) czy jakiegoś innego obiektu.
Jestem jednak całkowicie zagubiony, jeśli chodzi o techniki ekstrakcji funkcji w pythonie. Mój doradca przekonał mnie do korzystania z obrazów, które nie były omówione w klasie.
Czy ktoś może skierować mnie w stronę sensownej dokumentacji lub lektury lub zasugerować metody do rozważenia?
python
feature-extraction
image-recognition
Jeremy Barnes
źródło
źródło
Odpowiedzi:
Na obrazach niektóre często stosowane techniki ekstrakcji obiektów to binaryzacja i rozmycie
Binarizacja: konwertuje tablicę obrazu na 1 i 0. Odbywa się to podczas konwertowania obrazu na obraz 2D. Można również zastosować skalowanie szarości. Daje macierz numeryczną obrazu. Skala szarości zajmuje znacznie mniej miejsca, gdy jest przechowywana na dysku.
Oto jak to zrobić w Pythonie:
Przykładowy obraz:
Teraz przekonwertuj na skalę szarości:
zwróci ci ten obraz:
Macierz można zobaczyć, uruchamiając to:
Tablica wyglądałaby mniej więcej tak:
Teraz użyj wykresu histogramu i / lub wykresu konturowego, aby zobaczyć funkcje obrazu:
To zwróci ci wykres, który wygląda mniej więcej tak:
Rozmycie: Algorytm rozmycia bierze średnią ważoną sąsiednich pikseli, aby uwzględnić kolor otoczenia w każdym pikselu. Poprawia kontury i pomaga lepiej zrozumieć funkcje i ich znaczenie.
I tak to robisz w Pythonie:
A zamazany obraz to:
Oto kilka sposobów inżynierii obiektów. W przypadku zaawansowanych metod musisz zrozumieć podstawy wizji komputerowej i sieci neuronowych, a także różne typy filtrów oraz ich znaczenie i matematykę.
źródło
Ten świetny samouczek obejmuje podstawy neuronowej sieci splotowej, która obecnie osiąga najnowocześniejsze wyniki w większości zadań związanych z widzeniem:
http://deeplearning.net/tutorial/lenet.html
Istnieje wiele opcji dla CNN w pythonie, w tym Theano i biblioteki zbudowane na nim (uważam, że keras jest łatwy w użyciu).
Jeśli wolisz unikać głębokiego uczenia się, możesz zajrzeć do OpenCV, który może nauczyć się wielu innych rodzajów funkcji, kaskad Haar i funkcji SIFT.
http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_table_of_contents_feature2d/py_table_of_contents_feature2d.html
źródło
Jak powiedzieli Jeremy Barnes i Jamesmf, do rozwiązania problemu można użyć dowolnego algorytmu uczenia maszynowego. Są potężne i mogą automatycznie zidentyfikować funkcje. Musisz tylko podać algorytmowi prawidłowe dane treningowe. Ponieważ konieczne jest działanie na obrazach, sieci neuronowe splotowe będą dla Ciebie lepszą opcją.
To dobry poradnik do nauki o sieci neuronowej splotu. Możesz także pobrać kod i zmienić go zgodnie z definicją problemu. Ale musisz nauczyć się języka Python i biblioteki theano do przetwarzania, a do tego dostaniesz dobre tutoriale
http://deeplearning.net/tutorial/lenet.html
źródło