Jak sprawdzić, czy dwa obrazy są takie same? [Zamknięte]

20

Mam ponad 10.000 zdjęć, które około 2000 są duplikatami w innych formatach (jak JPEG, PNG, GIF). Obie te liczby rosną każdego dnia. Muszę usunąć te duplikaty i za to muszę wiedzieć, jak je znaleźć w pierwszej kolejności.

Moją pierwszą myślą było, by sprawdzić e obrazy piksele i znaleźć inne zdjęcia, które mają takie same kolorowe piksele w tych samych współrzędnych. Ale opcja ta nie zawsze działa. Powiedzmy, że szukam duplikatu. Jeśli chodzi o obiekt do przeszukiwania, wybieram 8-bitowy plik PNG. Znajdzie wszystkie duplikaty tego obrazu, ale tylko 8-bitowy PNG, czasem 8-bitowy GIF i rzadko JPEG (z powodu algorytmów obrazów, jak sądzę?).

Moją drugą myślą było zduplikowanie wszystkich tych obrazów i ponowne pokolorowanie ich w ścisłej palecie dwóch kolorów (powiedzmy czarno-biały) i wykonanie takiego samego skanu, jak podano powyżej. Po raz kolejny obraz JPEG nie jest w 100% podobny do formatu GIF lub PNG (z tego samego powodu co powyżej?).

Trzecią myślą było zmniejszenie procentu tego, jak bardzo obraz musi być znajomy, i zwiększenie ilości kolorów, które mogą się różnić, co skutkuje niechcianym usunięciem obrazu ...

jakieś pomysły?

Aistis
źródło
Formaty ze stratną kompresją doprowadzą do obrazów, które nie są w 100% identyczne z wersjami bez losowymi. Trzeba mieć narzędzia poleceń czy można uruchomić program gui, który sprawia, że propozycje, a następnie pokazuje zdjęcia, które mają, powiedzmy> 90% podobnych pikseli (liczona średnią odchylenie)? (i oczywiście rozmiar piksela powinny być identyczne w dowolnym formacie)
Thorsten Müller
1
Ile będzie mieć taką samą nazwę pliku, ale inne rozszerzenie?
JeffO
4
Przydatne odpowiedź, która nie wymaga tygodnie kodowania: stackoverflow.com/questions/596262/...
mac

Odpowiedzi:

17

Percepcyjne mieszań może być odpowiedź:

http://www.phash.org/

Percepcyjny hash jest odcisk palca pliku multimedialnego pochodzącego od różnych cech z jego treścią. W przeciwieństwie do kryptograficznych funkcji skrótu, które opierają się na lawinowym efekcie niewielkich zmian na wejściu, prowadzących do drastycznych zmian na wyjściu, skróty percepcyjne są „blisko”, jeśli cechy są podobne.

Joe
źródło
9
  1. Sprawdź wymiary. Jeśli inna => obrazy nie są takie same.
  2. Sprawdź formaty. Jeżeli ten sam => Wykonanie dokładnego porównania, piksel po pikselu.
  3. Jeśli różne formaty to zrobić:

Nie porównuj RGB (czerwony, zielony, niebieski). Porównanie jasności jako połowa masy i porównanie barwy / barwę w drugiej połowie (lub 2 / 3rds vs 1/3). Obliczyć różnicę w zależności od wartości i wartości „Tolerancja” są takie same lub nie.

JPEG mocno ściska informacji o kolorze, ale nie stara się zniszczyć wartości liminance.

Boris Yankov
źródło
6

Kiedy kilka lat temu przeglądałem kilka zdjęć pod kątem duplikatów, stwierdziłem, że zmniejszenie wszystkiego do miniatur 8 x 8, a następnie obliczenie podobieństwa na podstawie kwadratu odległości (traktowanie trzech kolorów osobno) między miniaturami działało całkiem dobrze. Pamiętaj, że możesz przechowywać DUŻO miniatur 8x8.

Praktycznie wszystkie duplikaty zdobył poniżej niebędących powtórzeń, o problemach będących tylko niektóre obrazy, które były bardzo niski kontrast i ogólnie podobne, chociaż rzeczywista zawartość zróżnicowane (tło w każdym przypadku była piaszczysta plaża).

Było to również skuteczne w przechwytywaniu obrazów, które były duplikatami, z wyjątkiem tego, że ktoś zmniejszył rozdzielczość lub jakość jednego w celu zmniejszenia rozmiaru pliku.

Loren Pechtel
źródło
1
Zazwyczaj YUV jest lepszy niż RGB, mniej wrażliwy na niewielkie zmiany balansu kolorów.
Martin Beckett
Ta technika miniatury, aby dokonać wstępnej selekcji potencjalnych mecze jest ważny, YUV jest miły dotyk i widziałem okazało się czystym mapie luminancji z tych samych powodów.
Patrick Hughes,
@Martin Beckett: Suma kwadratów różnicy RGB była pierwszą rzeczą, którą wypróbowałem i działała wystarczająco dobrze, że nie próbowałem jej poprawiać - i przy tym łapała duplikaty podczas edycji. Przy ścisłej definicji dupe'u było wystarczająco dobrze, że pozwoliłbym na automatyczne usuwanie.
Loren Pechtel
@Loren, jeśli były to niewielkie zmiany pikseli tego samego obrazu, które powinny działać. Chodzi o to, że takie rzeczy jak jpeg psują RGB bardziej niż przestrzeń kolorów YUV. Tylko wskazówka ;-)
Martin Beckett
Z natury bardzo ciemne zdjęcia mają zwykle niższą sumę-of-place-of-różnice, nawet jeśli nie są one podobne w ogóle. Próg może być regulowana przy średniej jasności obrazu. Używać tego avg jasności jako filtr wstępny, aby uniknąć O porównań (n ^ 2) obrazu, tak, że już nie.
Gabriel
1

Może powinieneś napisać kod, który skanuje obrazy na podobieństwo. Można przekonwertować wszystkie fotki w formacie ARGB i porównać je. (w pamięci)

Możliwym rozwiązaniem mogłoby być w ten sposób: Podzielić zdjęcia w strefach. Zeskanuj średni kolor i / lub jasność stref, aby porównać podobieństwo dwóch zdjęć.

Jeśli więcej niż powiedzą, 90% stref się zgadza, wybrałeś jedną, aby przejść do listy kandydatów do usunięcia. W ten sposób masz listę kandydatów. Możesz użyć współczynnika kształtu zdjęć, aby podzielić je na kategorie w poziomie i pionie, aby przyspieszyć porównania. w ten sposób można zrekompensować algorytmy stratne, które nie odtwarzają właściwych kolorów piksel po pikselu. Po uruchomieniu programu na noc, a rano trzeba to zrobić :) w .NET można to zrobić dość łatwo mu GDI + lib.

Na nie
źródło