Jak opłacalne byłoby klasyfikowanie tekstury obrazu przy użyciu funkcji z dyskretnej transformacji kosinusowej? Googling „klasyfikacja tekstur dct” znajduje tylko jeden artykuł akademicki na ten temat, używając sieci neuronowej.
Do mojej aplikacji mam duży korpus oznakowanych obrazów, w których cały obraz ma spójną teksturę (np. Zbliżenia kocu, kory drzewa, trawiastego pola itp.).
Zainspirowany odpowiedzią na poprzednie pytanie , rozważałem następujące podejście:
- podzielić każdy obraz na bloki pikseli NxN
- weź DCT każdego bloku
- spłaszcz każdy DCT do tablicy 1xM i podaj go do algorytmu klastrowania K-Means, i uzyskaj etykietę klastra dla każdego DCT
- obliczyć histogram etykiet grupowania dla każdego obrazu, licząc każdą etykietę na obrazie od # 3
- wytrenuj klasyfikator SVM, podając mu zestaw [(histogram, etykieta obrazu)]
Jak dobrze by to działało? Zaimplementowałem podobny system, używając funkcji wyodrębnionych za pomocą algorytmów SIFT / SURF, ale byłem w stanie uzyskać jedynie około 60% dokładności.
W jaki inny sposób mogę użyć DCT do klasyfikacji tekstur?
Odpowiedzi:
Jak dotąd to, co proponujesz, wydaje się rozsądnym podejściem. Jednak nie sądzę, że będziesz wiedział, jak to działa, dopóki nie wypróbujesz, tak jak wypróbowałeś SIFT.
Mam jednak pytanie. Dlaczego ograniczasz się do DCT? Istnieje wiele reprezentacji, które zostały użyte do klasyfikacji tekstur: macierze współwystępowania, lokalne wzory binarne itp. Fakt, że znalazłeś tylko jeden papier na temat korzystania z DCT do klasyfikacji tekstur sugerowałby, że nie jest to najczęściej używana funkcja za ten problem. Polecam poszerzenie wyszukiwania literatury, aby zobaczyć, jakich innych funkcji używali ludzie i jak dobrze działali.
źródło
Jeśli nie podzielisz obrazu na blok NxN, a zamiast tego użyjesz przesuwanego okna - obliczyć DCT dla bloków wyśrodkowanych w każdym punkcie obrazu, byłoby to zasadniczo przy użyciu podejścia falkowego. Twój obraz podzielony na bloki jest taki sam, jak przy użyciu przesuwanego okna i obrazu próbkowanego w dół. Zasadniczo używasz zredukowanej formy segmentacji tekstury falek. Fala gaborowa używana zamiast DCT zwykle dlatego, że: ma więcej parametrów (+ skala i + kierunek) i płynne tłumienie (zamiast ostrej krawędzi okna).
źródło
Jedną z największych atrakcji, dla których warto przeprowadzić segmentację / klasyfikację tekstur opartą na DCT (lub jakąkolwiek inną czynność), jest fakt, że większość obrazów JPEG i filmów MPEG jest już w DCT. Z drugiej strony uważa się, że podejście oparte na Gaborze jest kosztowne obliczeniowo.
Współczynniki DCT od średnich do wysokich i / lub częstotliwości po przekątnej odzwierciedlają dobrą reprezentację lokalnych zmian w dziedzinie pikseli.
Jednak wszystko to może nie być tak dobre, jak się wydaje. Po pierwsze, w większości standardów bloki DCT mają rozmiar 8 x 8. Sugeruje się więc, że jeśli scena ma wzór, który ma okresowość 8 punktów pikselowych, ten efekt rezonansowy będzie widoczny pod względem podobieństwa odpowiednich współczynników sąsiednich bloków, jednak gdy okresowość zmienia się, ta zależność jest różna.
Zrozumienie krytycznej różnicy między czystymi blokami DCT a Gaborem polega na tym, że Gabor ma skalę. Jeśli więc zmienisz „okresowość” lub „rozdrobnienie / szorstkość” tekstury, Gabor odkryje ją tam, gdzie jako stała ocena DCT @ 8x8 rozmiaru bloku nie będzie mogła dobrze pasować.
Jednak trzeba zdawać sobie sprawę z budowania takich wzorców, patrząc na wiele bloków razem, aby ocenić takie zjawisko skali . Jako podstawowe podejście, na przykład, zapytaj, czy miałbym bloki 16 x 16 lub 32 x 32, jakie byłyby wynikowe wzorce we współczynnikach efektywności? Współczynniki w odpowiednich lokalizacjach będą miały pewien związek do wykorzystania i pozwolą odkryć prawdziwą skalę tekstury.
Jest to rzeczywiście dobry temat badawczy do zrealizowania.
UWAGA: Nawet MPEG7 (który jest bardzo bliski komitetom, które utworzyły MPEG) - proponują funkcje tekstur oparte na Gaborze zamiast na DCT.
źródło