Lokalne wzorce binarne

Lokalne wzorce binarne ( LBP ) to rodzaj wizualnego deskryptora używanego do klasyfikacji w wizji komputerowej . LBP to szczególny przypadek modelu Texture Spectrum zaproponowanego w 1990 r. LBP został po raz pierwszy opisany w 1994 r. Od tego czasu stwierdzono, że jest to potężna funkcja do klasyfikacji tekstur; ponadto ustalono, że gdy LBP jest połączone z histogramem zorientowanych gradientów (HOG), znacznie poprawia wydajność wykrywania w niektórych zestawach danych. Porównanie kilku ulepszeń oryginalnego LBP w zakresie odejmowania tła dokonali w 2015 roku Silva i in. Pełny przegląd różnych wersji LBP można znaleźć w Bouwmans et al.

Pojęcie

Trzy przykłady sąsiedztwa użyte do zdefiniowania tekstury i obliczenia lokalnego wzoru binarnego (LBP)

Wektor cech LBP w najprostszej postaci jest tworzony w następujący sposób:

  • Podziel badane okno na komórki (np. 16x16 pikseli na każdą komórkę).
  • Dla każdego piksela w komórce porównaj piksel z każdym z jego 8 sąsiadów (lewy górny, lewy środkowy, lewy dolny, prawy górny itd.). Podążaj za pikselami wzdłuż okręgu, tj. zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara.
  • Tam, gdzie wartość piksela środkowego jest większa niż wartość piksela sąsiada, wpisz „0”. W przeciwnym razie napisz „1”. Daje to 8-cyfrową liczbę binarną (która dla wygody jest zwykle konwertowana na dziesiętną).
  • Oblicz histogram nad komórką częstotliwości występowania każdej „liczby” (tj. każdej kombinacji, które piksele są mniejsze, a które większe niż środek). Ten histogram można postrzegać jako 256-wymiarowy wektor cech .
  • Opcjonalnie znormalizuj histogram.
  • Połącz (znormalizowane) histogramy wszystkich komórek. Daje to wektor cech dla całego okna.

Wektor cech można teraz przetwarzać przy użyciu maszyny wektorów pomocniczych , maszyn do ekstremalnego uczenia się lub innego algorytmu uczenia maszynowego w celu klasyfikowania obrazów. Takie klasyfikatory można wykorzystać do rozpoznawania twarzy lub analizy tekstury.

Użytecznym rozszerzeniem oryginalnego operatora jest tak zwany wzorzec jednolity, który można wykorzystać do zmniejszenia długości wektora cech i zaimplementowania prostego deskryptora niezmiennego obrotu. Pomysł ten jest motywowany faktem, że niektóre wzorce binarne występują częściej w obrazach tekstur niż inne. Lokalny wzorzec binarny nazywany jest jednolitym, jeśli zawiera co najwyżej dwa przejścia 0-1 lub 1-0. Na przykład 00010000 (2 przejścia) to jednolity wzór, ale 01010100 (6 przejść) nie. Podczas obliczania histogramu LBP histogram ma osobny przedział dla każdego jednorodnego wzorca, a wszystkie niejednorodne wzorce są przypisywane do jednego przedziału. Używając jednolitych wzorców, długość wektora cech dla pojedynczej komórki zmniejsza się z 256 do 59. 58 jednolitych wzorców binarnych odpowiada liczbom całkowitym 0, 1, 2, 3, 4, 6, 7, 8, 12, 14, 15 , 16, 24, 28, 30, 31, 32, 48, 56, 60, 62, 63, 64, 96, 112, 120, 124, 126, 127, 128, 129, 131, 135, 143, 159, 191 , 192, 193, 195, 199, 207, 223, 224, 225, 227, 231, 239, 240, 241, 243, 247, 248, 249, 251, 252, 253, 254 i 255.

Rozszerzenia

  • Over-Complete Local Binary Patterns (OCLBP): OCLBP to wariant LBP, który, jak wykazano, poprawia ogólną wydajność weryfikacji twarzy. W przeciwieństwie do LBP, OCLBP przyjmuje nakładanie się na sąsiednie bloki. Formalnie konfiguracja OCLBP jest oznaczona jako S: (a, b, v, h, p, r): obraz jest podzielony na bloki a×b z pionowym nakładaniem się v i poziomym nakładaniem się h, a następnie jednolitymi wzorami LBP (u2,p,r) są wyodrębniane ze wszystkich bloków. Ponadto OCLBP składa się z kilku różnych konfiguracji. Na przykład w swojej oryginalnej pracy autorzy zastosowali trzy konfiguracje: S : (10,10,12,12,8,1),(14,14,12,12,8,2),(18,18,12 ,12,8,3). Trzy konfiguracje uwzględniają trzy rozmiary bloków: 10 × 10, 14 × 14, 18 × 18 i połowę współczynnika nakładania się wzdłuż kierunku pionowego i poziomego. Konfiguracje te są łączone w celu utworzenia 40877 wymiarowego wektora cech dla obrazu o rozmiarze 150x80.
  • Przejściowe lokalne wzorce binarne (tLBP): wartość binarna zakodowanego przejścia LBP składa się z porównań sąsiednich pikseli w kierunku zgodnym z ruchem wskazówek zegara dla wszystkich pikseli z wyjątkiem centralnego.
  • Lokalne wzorce binarne z kodowaniem kierunkowym (dLBP): dLBP koduje zmianę intensywności wzdłuż czterech podstawowych kierunków przez centralny piksel w dwóch bitach.
  • Multi-block LBP: obraz jest podzielony na wiele bloków, histogram LBP jest obliczany dla każdego bloku i łączony jako końcowy histogram.
  • Tom Local Binary Pattern (VLBP): VLBP patrzy na dynamiczną teksturę jako zbiór objętości w przestrzeni (X,Y,T), gdzie X i Y oznaczają współrzędne przestrzenne, a T oznacza indeks klatki. W ten sposób sąsiedztwo piksela jest definiowane w przestrzeni trójwymiarowej, a tekstony objętościowe można wyodrębnić w histogramy.
  • RGB-LBP: Ten operator jest uzyskiwany poprzez niezależne obliczenie LBP dla wszystkich trzech kanałów przestrzeni kolorów RGB, a następnie połączenie wyników.

Implementacje

  • CMV , zawiera ogólną implementację LBP i wiele dalszych rozszerzeń histogramu LBP w MATLAB-ie.
  • Python mahotas , pakiet wizji komputerowej typu open source, który zawiera implementację LBP.
  • OpenCV obsługują LBP od wersji 2.
  • VLFeat , biblioteka wizji komputerowej typu open source w C (z powiązaniami z wieloma językami, w tym MATLAB) ma implementację .
  • LBPLibrary to zbiór jedenastu algorytmów lokalnych wzorców binarnych (LBP) opracowanych dla problemu odejmowania tła. Algorytmy zostały zaimplementowane w C++ w oparciu o OpenCV. Dostarczany jest plik CMake, a biblioteka jest kompatybilna z systemami Windows, Linux i Mac OS X. Biblioteka została pomyślnie przetestowana z OpenCV 2.4.10.
  • BGSLibrary zawiera oryginalną implementację LBP do wykrywania ruchu, a także nowy wariant operatora LBP w połączeniu z polami losowymi Markowa o ulepszonych współczynnikach rozpoznawania i niezawodności.
  • dlib , otwarta biblioteka C++: implementacja .
  • scikit-image , biblioteka Pythona typu open source. Zapewnia opartą na C implementację języka Python dla LBP

Zobacz też