2012-10-26 9 views
9

Zastanawiam się, czy istnieje istniejący algorytm/biblioteka/framework do porównania dwóch obrazów, aby sprawdzić, czy jest to druga wersja innego? Język programowania nie ma znaczenia na tym etapie.Znajdź zduplikowane obrazy różnych rozmiarów

Jeśli nic tam nie ma, muszę coś napisać. Co do tej pory myślałem:

  • (Drogie) Zmień rozmiar większego na mniejszy i porównaj piksel po pikselu.

  • Lepiej, po prostu zmień rozmiar kilku losowych "obszarów" na zdjęciu i porównaj. Jeśli pasują, konwertuj więcej, itd ...

  • Przerwij obraz na kilka wierszy i kolumn i wykonaj jakiś rodzaj matematyki parzystości na wartościach kolorów.

Problem widzę z dwóch pierwszych pomysłów zwłaszcza, że ​​istnieją różne sposoby, aby zmienić rozmiar obrazu w pierwszej kolejności, a więc matematyka prawdopodobnie nie będzie pracować tak samo na wszystkich. Niektóre zmiany powiększają rozmycie, itp.

Jeśli ktoś mógłby wskazać mi jakąś dobrą literaturę na ten temat, byłoby wspaniale. Moim googlowaniem są głównie aplikacje typu shareware, które nie są tym, czego chcę.

Celem jest uruchomienie tej aplikacji z tyłu serwera sieciowego.

+0

Po wybraniu losowych obszarów, w jaki sposób wybrać obszary docelowe do porównania? – Acorbe

+0

Wyszukiwanie wektorów własnych, które odniosły sukces przy użyciu tego do rozpoznawania twarzy (eigenfaces) lub dowolnej liczby technik rozpoznawania obrazu, które są bardziej skomplikowane niż losowe próbkowanie –

+1

Również http://stackoverflow.com/a/12823054/1633931 –

Odpowiedz

2

Najlepsze podejście zależy od charakterystyki porównywanych obrazów, jaki jest procent prawdopodobieństwa, że ​​obrazy są takie same, a kiedy są różne, czy zazwyczaj są one często wyłączane lub mogą być tak niewielkie jako różnica pojedynczego piksela?

Jeśli powyższe odpowiedzi są takie, że zdjęcia, które należy porównać, będą całkowicie losowe, a następnie skorzystanie z kosztownego rozwiązania, a niektóre z dostępnych pakietów mogą być najlepszym rozwiązaniem.

Jeśli wiesz, że zdjęcia są zazwyczaj inne niż zwykle, a obrazy zazwyczaj różnią się bardzo dużo i naprawdę chcesz ręcznie przetworzyć rozwiązanie, możesz wykonać kilka wstępnych "szybkich porównań" byłoby to mniej kosztowne i szybko zidentyfikowałoby wiele przypadków, w których obrazy są inne.

Na przykład można zmienić rozmiar większego obrazu, a następnie porównać piksel po pikselu (lub obliczyć skrót wartości pikseli) tylko "linię ukośną" obrazu (górny lewy piksel do dolnego prawego piksela) i w ten sposób wykluczają różne obrazy i robią tylko droższe porównanie dla tych, którzy zdadzą ten test.

Lub wybierz wstępnie ustawioną liczbę punktów, niezależnie od tego, jaka jest "dobra dystrybucja", w zależności od typu obrazu, i wykonaj tylko droższe porównanie dla tych, które pomyślnie przejdą ten test.

Jeśli wiesz dużo o obrazach, które będziesz porównywać, mają one cechy charakterystyczne i różnią się częściej niż są one takie same, wdrożenie taniego "szybkiego porównania eliminacji" zgodnie z powyższymi może być warte zachodu. .

1

Musisz przyjrzeć się temu algorytmowi dHash.

Napisałem czystą bibliotekę Java na kilka ostatnich dni. Możesz go podać ścieżką do katalogu (zawierającą podkatalog), a wyświetli listę duplikatów na liście z bezwzględną ścieżką, którą chcesz usunąć.Możesz też użyć go do znalezienia wszystkich unikatowych obrazów w katalogu.

Użyto awt api wewnętrznie, więc nie można go używać na Androidzie. Ponieważ imageIO ma problem z odczytywaniem wielu nowych typów obrazów, używam dwunastu słoików z małpami, które są używane wewnętrznie.

https://github.com/srch07/Duplicate-Image-Finder-API

słoik z zależnościami wiązanych wewnętrznie można pobrać ze strony, https://github.com/srch07/Duplicate-Image-Finder-API/blob/master/archives/duplicate_image_finder_1.0.jar

API można znaleźć duplikaty wśród zdjęć o różnych rozmiarach też.

+0

Byłoby wspaniale dowiedzieć się więcej szczegółów na temat pytania OP, część API, które obsługuje to. Może ogólne wyjaśnienie, jak to działa? _ Api może znaleźć duplikaty między obrazami o różnych rozmiarach. – RyBolt

Powiązane problemy