2013-05-21 11 views
15

TinEye, Google i inne oferują "wyszukiwanie odwróconego obrazu" - możesz przesłać zdjęcie, aw ciągu kilku sekund znajdzie podobne zdjęcia.Algorytm wyszukiwania wizualnie podobnych zdjęć z bazy danych?

Czy istnieje otwarta wersja tych algorytmów?


wiem o „SIFT” i innych algorytmów znajdowania „wizualnie” Zdjęcia podobne, ale działają one tylko do porównywania jedno zdjęcie bezpośrednio do drugiego. tj. znalezienie podobnych zdjęć do danego zdjęcia jest operacją O(n), w celu znalezienia wszystkich podobnych wizualnie zdjęć będzie to O(n^2) - oba z nich są zaporowo powolne.

Potrzebuję deskryptora operacji, który można indeksować za pomocą [relacyjnej] bazy danych, aby zmniejszyć zestaw wyników do czegoś łatwiejszego w zarządzaniu.

"Podobieństwo wizualne" mam na myśli bardzo podobną do. tj. zdjęcie lekko podbarwione/przebarwione w programie Photoshop, lekko przycięte lub przeskalowane, zdjęcia zrobione w krótkich odstępach czasu od tej samej sceny lub obrócone lub obrócone obrazy.

+1

Czy przyjrzałeś się Liniowej Analizie Dyskryminacyjnej (LDA)/Głównej Analizy Składowej (PCA)? Jeśli dobrze pamiętam, byli w pewnym momencie wykorzystywani do przetwarzania obrazu/rozpoznawania twarzy i czegokolwiek.Ich mocna strona polega właśnie na zredukowaniu opisu funkcji do czegoś łatwiejszego w zarządzaniu :) w tym przypadku pixel info –

+0

@Arthur: W tej chwili implementuję "PODPIS NA OBRAZ DLA JAKIEGOKOLWIEK OBRAZU", przyjrzę się temu jeden następny, jeśli ten nie zostanie wyrzucony. Dzięki :-) Rozpoznawanie twarzy nie jest mi potrzebne. – mpen

+0

Zbudowałem mechanizm podobieństwa obrazów kilka lat temu. Z pewnością można przechowywać funkcje w relacyjnych bazach danych, ale moim zaleceniem byłoby rozważenie użycia odwróconego indeksu jako silnika zapytań. Daje to o rząd wielkości większą szybkość i elastyczność, jeśli chodzi o dostarczanie danych. –

Odpowiedz

15

Ważnym podejściem, które można rozważyć, jest Bag-of-Words model.

Zasadniczo można wykonać obliczenia offline obrazów docelowych. Możesz wyodrębnić z tych obrazów garść funkcji, aby stworzyć książkę kodową z algorytmami takimi jak k-means clustering. Wyszukiwanie najbliższych obrazów doprowadzi do zastosowania algorytmu takiego jak Nearest neighbor search w przestrzeni książki kodowej.

Dla sąsiada wyszukiwania można użyć Flann

Spójrz również na: Visual similarity search algorithm

To jest tylko możliwość, a prawda musi Powiedzmy, że ten temat jest naprawdę trudny, a literatura na nim jest naprawdę ogromna.

Zaledwie kilka odnośników:

+0

Część, która mnie najbardziej interesuje, to w jaki sposób przeprowadzamy wyszukiwanie najbliższego sąsiada na relacyjnej bazie danych z wektorami ~ 500 wymiarów? – mpen

+0

Zaktualizowałem odpowiedź –

+1

FLANN nie odpowiada na część DB pytania;) Jestem pewien, że byłoby wspaniale, gdy wszystkie dane są w pamięci, ale nie mogę odczytać miliona rekordów w pamięci za każdym razem ktoś wykonuje wyszukiwanie. Chyba że zachowam wszystkie dane w pamięci pomiędzy żądaniami ... moje sygnatury mają ~ 500 bajtów, więc mogłem przechowywać sporo zależnie od wymagań FLANN. – mpen

Powiązane problemy