Zalecałbym rozważenie odejścia od zwykłego korzystania z histogramu RGB.
Lepsze podsumowanie obrazu można uzyskać, jeśli weźmiesz falkę 2d Haar obrazu (jest o wiele łatwiejsza niż się wydaje, jest po prostu dużo uśredniania i kilka pierwiastków kwadratowych używanych do ważenia współczynników) i po prostu zachowasz k największych ważone współczynniki w falce jako rzadkim wektorze, znormalizuj go i zapisz, aby zmniejszyć jego rozmiar. Powinieneś przeskalować RG i B, używając przynajmniej wag percepcyjnych, lub zaleciłbym przejście na YIQ (lub YCoCg, aby uniknąć szumu kwantyzacji), abyś mógł próbkować informacje o chrominancji o mniejszym znaczeniu.
Możesz teraz użyć iloczynu skalarnego dwóch z tych rzadkich znormalizowanych wektorów jako miary podobieństwa. Pary obrazów z największymi iloczynami skalarnymi będą miały bardzo podobną strukturę. Ma to tę zaletę, że jest nieco odporny na zmianę rozmiaru, zmianę odcienia i znaki wodne, a także jest naprawdę łatwy do wdrożenia i kompaktowy.
Możesz wymienić miejsce na przechowywanie i dokładność, zwiększając lub zmniejszając k.
Sortowanie według pojedynczego wyniku liczbowego będzie trudne do rozwiązania tego rodzaju problemu klasyfikacyjnego. Jeśli się nad tym zastanowić, wymagałoby to, aby obrazy mogły „zmieniać się” tylko wzdłuż jednej osi, ale tak się nie dzieje. Dlatego potrzebujesz wektora funkcji. W przypadku falki Haara jest to mniej więcej miejsce, w którym występują najostrzejsze nieciągłości obrazu. Możesz obliczyć odległość między obrazami parami, ale ponieważ jedyne, co masz, to metryka odległości, uporządkowanie liniowe nie ma możliwości wyrażenia „trójkąta” trzech obrazów, które są jednakowo oddalone. (tj. pomyśl o obrazie, który jest cały zielony, obrazie, który jest cały czerwony i obraz, który jest cały niebieski).
Oznacza to, że każde rzeczywiste rozwiązanie problemu będzie wymagało operacji O (n ^ 2) na liczbie posiadanych obrazów. Gdyby jednak można było zlinearyzować miarę, można by wymagać tylko O (n log n) lub O (n), jeśli miara nadaje się, powiedzmy, do sortowania metodą radix. To powiedziawszy, nie musisz wydawać O (n ^ 2), ponieważ w praktyce nie musisz przeszukiwać całego zestawu, wystarczy znaleźć rzeczy, które są bliżej niż jakiś próg. Tak więc, stosując jedną z kilku technik podziału rzadkiej przestrzeni wektorowej, można uzyskać znacznie szybsze asymptotyki dla problemu `` znajdowania obrazów, które są bardziej podobne niż dany próg '', niż naiwne porównywanie każdego obrazu z każdym obrazem, co daje prawdopodobnie potrzebujesz ... jeśli nie dokładnie tego, o co prosiłeś.
W każdym razie użyłem tego kilka lat temu z dobrym skutkiem osobiście, próbując zminimalizować liczbę różnych tekstur, które przechowywałem, ale w tej przestrzeni było też dużo szumu badawczego pokazującego jego skuteczność (w tym przypadku porównując do bardziej wyrafinowanej formy klasyfikacji histogramu):
http://www.cs.princeton.edu/cass/papers/spam_ceas07.pdf
Jeśli potrzebujesz większej dokładności w wykrywaniu, algorytmy minHash i tf-idf mogą być używane z falką Haara (lub histogramem), aby lepiej radzić sobie z edycjami:
http://cmp.felk.cvut.cz/~chum/papers/chum_bmvc08.pdf
Wreszcie, Stanford ma wyszukiwanie obrazów oparte na bardziej egzotycznym wariancie tego rodzaju podejścia, opartym na robieniu większej ilości ekstrakcji cech z falek w celu znalezienia obróconych lub skalowanych sekcji obrazów itp., Ale to prawdopodobnie wykracza daleko poza ilość pracy, którą chciałbym zrobić.
http://wang14.ist.psu.edu/cgi-bin/zwang/regionsearch_show.cgi