Eliminacja tła obrazu

Dziś zamieszczam wyniki oddzielania tła od obiektu w moim projekcie Flover. Opiszę procedurę i jakość ekstrakcji samego kwiata od reszty obrazu. Metoda opiera się na wcześniej opisanym algorytmie generacji superpikseli SLIC. Wykorzystuję również klasyfikator SVM, który generuje odpowiedź czy superpiksel jest tłem czy obiektem na podstawie bazy zdjęć kwiatów. Rezultat nie jest może na razie oszałamiający, ale ważne, że mam już napisany jako taki framework do tego typu operacji. Teraz pozostanie podkręcić jego parametry lub dodać kolejną metodę wspomagającą cały proces eliminacji tła.

Procedura

Metody przetwarzania obrazu, czyli np. eliminacji tła możemy podzielić na dwie grupy. Pierwsze to te, w których wykorzystujemy jedynie informację o bieżącym obrazie (ewentualnie parę poprzednich ramek w sekwencji wideo). Przeprowadza się w nich “klasyczne” operacje w celu np. segmentacji, wykrycia krawędzi, eliminacji szumu itp. Poprzednie ramki o których tu wspomniałem mogą się bardzo przydać właśnie w wydzieleniu tła – analizujemy które piksele są w “ruchu” a które są statyczne. Drugą grupą metod są te oparte o Machine Learning, czyli posiadające uprzednio wiedzę o jakimś problemie – nauczone dużą ilością przykładów. Jest to zbliżone do działania umysłu ludzkiego, który nabywając doświadczenie jest w stanie odróżnić jabłko od pomarańczy czy ustalić, że samochód można zaliczyć do obiektu a ulicę do tła.

W moim projekcie, w celu oddzielenia kwiatu od tła zdecydowałem się na tą drugą opcję, gdyż metody Machine Learning często sprawdzały się w innych moich projektach a eliminacji tła jeszcze tym sposobem nie przeprowadzałem. Poza tym, wzorowałem się na tej pracy, w której bardzo dobrze działa taki mechanizm oddzielenia tła.

Nauka klasyfikatora

Ponieżej wypisałem kroki, które należy wykonać w celu nauki klasyfikatora SVM.

  1. Wybór i wczytanie grupy zdjęć “uczących”.
  2. Wraz ze zdjęciami uczącymi, wczytanie ich masek oddzielających obiekt od tła.
  3. Segmentacja obrazów metodą SLIC.
  4. Jeśli dany segment znajduje się w większości w rejonie tła (wiemy to od wczytanej maski) przypisanie mu etykiety: “tło”, w innym przypadku przypisanie etykiety “obiekt”.
  5. Wyodrębnienie wektorów cech dla każdego segmentu w każdym obrazie.
  6. Cecha składa się z: średniego koloru superpiksela, wariancji kolorów w segmencie, położenia superpiksela.
  7. Podanie zestawu wektorów cech do klasyfikatora jako wejście.
  8. Podanie zestawu etykiet tło/obiekt do klasyfikatora jako wyjście.
  9. Trening klasyfikatora SVM.

Po takim treningu, gdy weźmiemy nowy obraz, wydzielimy segmenty oraz przypiszemy im wektory cech, klasyfikator odpowie jakim typem jest każdy segment.

Baza zdjęć i masek

W moich wstępnych testach korzystałem z publicznie dostępnej bazy zdjęć kwiatów. Do treningu klasyfikatora użyłem tylko 6 zdjęć tego samego gatunku a testowałem na innych zdjęciach tego samego gatunku. Wynika to z tego, że klasyfikator ma na razie tylko informacje o kolorze i pozycji segmentu. Chciałem też w szybkim czasie uzyskać obiecujący wynik, co byłoby trudniejsze w treningu tysięcy zdjęć. Niemniej jednak, takie próby już niedługo przeprowadzę. Poniżej zestaw wczytanych, treningowych danych (oryginalne zdjęcie, podzielone na superpiksele i maska tła).

daneUczace4

Jako klasyfikator wybrałem SVM czyli Support Vector Machines. Jest on w pełni zaimplementowany w bibliotece Accord i jego użycie jest bardzo proste. Zarazem jest bardzo skuteczny i często używany w działce Machine Learning. Dla moich danych treningowych jego skuteczność wyniosła 100%. Dla ponownie wczytanych zdjęć i ponownej segmentacji uzyskałem skuteczność 97% (segmentacja SLIC za każdym razem produkuje nieco inne superpiksele w związku z losowością procesu).

Testy

Poniżej przedstawiam wyniki eliminacji tła dla nowych (testowych) zdjęć. Tak jak wyżej, widzimy kolejno oryginalne zdjęcie, podzielone na superpiksele i maskę tła. Skuteczność klasyfikatora dla tych testów wyniosła 81%. W niektórych miejscach pojawiają się czarne dziury w miejscu kwiata co oznacza niepoprawną klasyfikację. Będzie to można poprawić zmieniając parametry klasyfikatora SVM albo dokładając kolejny etap eliminacji tła (np. GrabCut jak w tej pracy). Trzeba będzie jeszcze dodać parę kolejnych cech superpiksela do wektora cech uczących takich jak kształt superpiksela czy powierzchnię co powinno podnieść skuteczność całego procesu.

daneTestujace2

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.