2009-06-12 15 views
7

Próbuję zbudować narzędzie takie jak to http://labs.ideeinc.com/multicolr, , ale nie wiem, którego algorytmu używają, Czy ktoś wie?Algorytm wyszukiwania podobieństwa wizualnego

+0

Nie jestem pewien, czy jest to wykrywanie podobieństwa wizualnego, bardziej przypomina indeksowanie kolorów (kolory i udział w powierzchni). Ponieważ kolor składa się ze składników numerycznych, możesz zbudować algorytmy, które będą się w nim indeksować. –

Odpowiedz

5

Wszystko, co robią, to pasujące histogramy.

Stwórz histogram dla swoich zdjęć. Normalizuj histogramy według rozmiaru obrazu. A histogram to wektor z tylu elementów, co kolorów. Nie potrzebujesz 32,24, a może nawet 16 bitów dokładności, a to tylko spowolni cię. Ze względów wydajności, zamieniłbym histogramy na 4, 8 i 10-12 bitów.

  • Wykonaj rozmyte zdjęcie least distance compare między wszystkimi 4-bitowymi histogramami i próbkami kolorów.
  • Następnie weź ten zestaw i porównaj 8-bitowy histogram.
  • Następnie może przejść do histogramu 10 lub 12-bitowego porównać z pozostałym zestawem. Będzie to wyszukiwanie o najwyższej wydajności, ponieważ porównujesz cały zestaw z bardzo małą liczbą obliczeń, aby znaleźć mały podzestaw.
  • Wtedy pracować na małej podgrupie z większej liczby obliczeń itp

Prawdziwy duży Sztuką jest znaleźć najlepszy algorytm dopasowywania podobne histogramy.

  • Zacznij od obliczenia odległości. W 3 wymiarach myślę, że było:

    sqrt ((x1-x2)^2 + (y1-y2)^2 + (Z1-Z2)^2)

to robię z pamięci, więc sprawdź to.

  • Dla swoich celów będziesz mieć więcej niż 3 wymiary, więc będziesz mieć więcej terminów. 4-bitowy histogram miałby 16 terminów, 8-bitowy miałby 256 terminów itp. Pamiętaj, że ten rodzaj matematyki jest powolny, więc nie rób tak naprawdę części SQRT. Jeśli wystarczająco znormalizujesz rozmiar swoich obrazów, powiedzmy do 10 000 pikseli, wtedy będziesz wiedzieć, że zawsze będziesz musiał wykonać x^2 dla wartości 0..10,0000. Wstępnie obliczyć tabelę odnośników o numerze: x^2, gdzie x wynosi od 0,10 000. Wtedy twoje obliczenia pójdą szybko.

  • Po wybraniu koloru z palety wystarczy utworzyć histogram o tym samym kolorze = 10,0000. Gdy wybierzesz 2, zrób histogram z kolorem 1 = 5000, kolor2 = 5000 itd.

  • Na koniec będziesz musiał dodać czynniki krówkowe, aby aplikacja pasowała do prawdziwego świata, ale znajdziesz je za pomocą testów.

+0

dziękuję użyję imageJ i tego algorytmu programowego http://rsb.info.nih.gov/ij/plugins/color-inspector.html – Emrah

+0

Wspomnę, że robię rozmyte porównanie najmniejszych odległości. Myślę, że byłem na narkotykach. Po prostu dokonaj porównania najmniejszej odległości. :) – johnnycrash

0

Prawdopodobnie po prostu tworzy się histogram kolorów używanych w obrazach, a następnie najlepiej pasuje do wybranych przez użytkownika kolorów.

2

Proponuję dokonać pewnego rodzaju grupowania kolorów obecnych w obrazach w bazie danych.To znaczy, dla każdego obrazu w bazie danych:

  • zbierać kolory poszczególnych pikseli w obrazie
  • wykonywania klastrów (powiedzmy k średnie klastry z 5 klastrów) na zebranych kolorach
  • Przechowywać skupione kolory jako przedstawiciel deskryptora obrazu

Gdy użytkownik dostarcza zestaw jednego lub więcej kolorów zapytań zrobić jakiś rodzaj chciwy dopasowania wyborze najlepszego meczu pomiędzy podanych kolorów i deskryptora koloru (5 reprsentative kolorach) każdego obrazu w bazie danych .

Jaki jest rozmiar kolekcji zdjęć, ponieważ w zależności od rozmiaru niektóre indeksowanie wyszukiwania może stanowić większy problem niż sam alogorith?

Powiązane problemy