Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Bilder-Doubletten entdecken?

Bilder-Doubletten entdecken?

Schnapper16.02.0616:05
Hallo miteinander...

ich hab folgendes Problem: Ich hab einen Ordner mit über 3800 Bildern. Alle Bilder zeigen ähnliche Möbelstücke, oftmals nur aus verschiedenen Blickwinkeln fotografiert. Die Pixelgröße der Bilder ist jedesmal gleich (260x260 px).

Nun sind in dem Ordner einige Bilder doppelt und dreifach. Ich kann sie nicht anhand des Dateinamens ausfiltern - der besteht manchmal nur aus einer Zahl, manchmal aus dem Artikelnamen, manchmal aus einer Mischung von beidem.
Ich kann sie nicht anhand eines Prüfsumme oder der Dateigröße identifizieren, da es manchmal ein und dasselbe Bild ist, das neu beschnitten wurde und sich daher zwar von den Dateninformationen, nicht aber vom optischen Eindruck her vom anderen unterscheidet.

Ich bräuchte also eine Methode, um Bilder anhand ihrer optischen Ähnlichkeit vergleichen zu können. Hat da irgendjemand eine Idee oder einen Ansatz?

Anderenfalls muss ich 3800 Bilder manuell durchsortieren.. da sitz ich ja Wochen dran... ((sick)
0

Kommentare

rofl
rofl16.02.0616:34
Grundsätzlich geht es, wird zB bei Gesichtserkennung verwendet.
Aber Software dafür?

Grob gerechnet brauchst du um jedes Bild mal anzuschauen 1s, d.h etwas mehr als 1h, um eine Vorsortierung vorzunehmen. Mit dem Finder auf 128x128 eingestellte Voransicht, sollte auch die erste grobe Sortierung schnell gemacht sein.

Komplett auseinandergefrimelt hast das in einem Tag.
Einen besseren Rat weiss ich jetzt nicht.
0
rofl
rofl16.02.0616:39
Hier aber ein paar Ansätze:


Bei google findet man auch viel mehr Theorie, "recognize picture" oder auch "recognize image". Aber wie gesagt, bis man da Ergebnisse hat, ist das eigene Auge immer noch am schnellsten.
0
Schnapper16.02.0616:51
So einen ähnlichen Ansatz programmier ich gerade schon:
Ich lasse mir jedes Bild on the fly auf 3x3 Pixel runterrechnen. Dann vergleiche ich von jedem der 9 Pixel die Farbwerte mit dem eines zweiten Bildes und errechne eine Differenz. Wenn die Gesamtdifferenz einen gewissen Schwellenwert unterschreitet, geh ich von einer Dublette aus.


Das scheint gerade recht gut zu funktionieren, allerdings hab ich es bis jetzt nur mit 3 Testbildern ausprobiert... mal schauen, was passiert, wenn ich das auf den gesamten Bilderordner loslasse... *g* momentan häng ich an ein paar Details.
0
rofl
rofl16.02.0616:53
Ich wünsch dir viel Glück,
denn andere schreiben ihr Dr-Arbeit darüber...
0
Schnapper16.02.0617:00
Danke Dir... ich bin grad ziemlich erstaunt, wie gut das Ergebnis bei dieser doch sehr primitiven Routine ist...
0
rofl
rofl16.02.0617:02
Welche Sprache benutzt du?
0
Schnapper16.02.0617:23
PHP. Da kann ich auf eine recht gute Image-Funktionssammlung zurückgreifen.

Außerdem ist das die einzige Sprache, in der ich halbwegs gut bin
0
rofl
rofl16.02.0617:26
Okay, hab mir gerade nämlich schon Gedanken gemacht, welche Sprache dir so schnell Ergebnisse liefert.

Berichte mal wie es läuft, gerne mit Code...
0
Schnapper16.02.0617:40
Hmm... ich hab zum Austesten einen G4 Dual mit MAMP drauf. AUf dem läuft das Skript, das die Prüfschleife 3800x3800 Mal durchläuft.

Ich starte das Skript - die ersten Ergebnisse tickern über den Screen - und dann läuft der Lüfter des G4 plötzlich auf Hochtouren und saugt die ganze Luft aus dem Raum.. *gg* ich glaub, da muss ich noch optimieren....
0
Eszett
Eszett16.02.0617:51
Ein erster Schritt wäre, überflüssige Vergleiche auszufiltern. Z.B. braucht kein Bild mit sich selbst verglichen zu werden, und ein Vergleich a mit b ist derselbe wie b mit a. Also ergeben sich nur noch (n * (n - 1))/2 Vergleiche. Ist das korrekt?
0
Schnapper17.02.0609:04
Also, prinzipiell funktioniert das Skript, auch wenn ich sehr viele false positives habe - aber das stört mich nur am Rande, denn lieber sortier ich 200 Bilder aus als 3800.

Momentan vergleich ich ja pro Bild 3x3 Bildpunkte anhand ihrer RGB-Werte, wobei ich nur eine maximale Abweichung von x % erlaube.
Das funktioniert zu 100% bei echten Doubletten sowie zu 98% bei Doubletten, die sich minimal im Bildbeschnitt unterscheiden.
Die False-positives entstehen dadurch, dass ein Bild mit ähnlichen RGB-Werten trotzdem sehr unterschiedlich sein kann..
Was meinem Skript aber den Todesstoß versetzt hat, war die Tatsache, dass auch Bilderdoubletten drin sind, die sich nur in der Helligkeit leicht unterscheiden - womit natürlich die RGB-Werte durch die Bank voneinander abweichen. Und diese Doubletten hat das Skript nicht erkannt. Hier bräuchte ich also einen viel komplexeren Algorithmus, der auch die Helligkeit vergleicht bzw die DIfferenz auf eine ganz andere Weise berechnet als nur die Summe der Einzeldifferenzen auf den jeweiligen RGB-Werten.

Aus dem Grund werd ich das wohl doch manuell aussortieren.. ob ich jetzt noch 2 Tage an dem Skript sitz oder dann die Doubletten zwei Tage lang manuell ausfiltere, bleibt sich dann auch schon gleich.
0
rofl
rofl17.02.0611:21
Also doch Ansatz No 1.

Viel Glück!
0
Stardust
Stardust17.02.0612:21
Meines Wissens nach kann Canto Cumulus Bilder vergleichen.
Davon gibt es auch eine Demo.
Vielleicht reicht die Funktion ja aus.

Ad Astra
„Ad Astra“
0
chagrin
chagrin18.02.0616:13
Ansatz Dateigrösse: Ev. könnte man Dupletten in der Listendarstellung erkennen, falls man nach kb oder gar bites sortieren könnte.
0
chagrin
chagrin18.02.0620:37
Nachtrag: Dateigrösse unterscheidet sich natürlich nur bei komprimierten Bildern (LWZ oder jpg).
0
sonorman
sonorman18.02.0620:46
Hab jetzt nicht alles gelesen, also sorry, wenn schon mal darauf hingewiesen wurde:
iView MediaPro hat eine Funktion, um doppelte und ähnliche Bilder zu finden. Funktioniert ganz gut (aber nicht perfekt).
0
MetallSnake
MetallSnake19.02.0611:02
Wie wäre es mit dem Graphicconverter? Einfach Ordner auf das Programm ziehen dann erscheint der Dateibrowser. In der Toolbar auf weiteres klicken und dann "Doppelte Dokumente suchen" wählen. Man kann auswählen ob identische Bilder oder ähnliche Bilder gesucht werden sollen, sogar die Tolleranz lässt sich verstellen. Danach kann man sich angucken ob das auch alles Dubletten sind und diese dann gegebenenfalls mit einem Knopfdruck löschen. Funktioniert bei mir ganz gut.
„Das Schöne an der KI ist, dass wir endlich einen Weg gefunden haben, wie die Wirtschaft weiter wachsen kann, nachdem sie jeden Einzelnen von uns getötet hat.“
0
sonorman
sonorman19.02.0611:26
MetallSnake

Ah siehste, ich wußte gar nicht dass GC das auch so macht wie iView.
Dabei ist GC natürlich deutlich günstiger.
0
seaside17.02.0603:16
Das Thema ist wirklich mathematisch sehr komplex. Wenn ich mich richtig erinnere - hatte mal Kontakt zu einem Prof, dessen Thema das war, - dann spielen Konvolutionen einen Rolle. Hm, kann auch was anderes gewesen sein.

Anway: Gute verfahren erkennen auch gespiegelte/rotierte und vergrößerte/Verkleinerte Objekt. In der Tat werden pro Bild Kennzahlen berechnet und verglichen.

Ja, melde Dich mal, wenn's läuft. Würd mich auch interessieren...

0
seaside19.02.0616:36
Mal ansehen:

ImageSeek http://www.imgseek.net/
Lifsift als X# Code http://user.cs.tu-berlin.de/~nowozin/libsift/
SIFT Theorie http://en.wikipedia.org/wiki/Scale-invariant_feature_transform
0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.