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?



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.


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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.