Forum: PC-Programmierung Unterschiede in Bildern finden


von Borislav B. (boris_b)


Lesenswert?

Hallo,
ich suche nach einer Möglichkeit, Unterschiede in Bildern zu finden. Das 
können z.B. zwei Fotos von der selben Szene sein, in der sich jedoch 
etwas verändert hat (eine Person hat das Bild verlassen o.Ä.).

Der Algorithmus sollte robust gegen leichte Änderungen der Perspektive 
sein (wenn die Fotos Freihand geschossen wurden). Auch kleinere 
Änderungen in der Beleuchtung (eine Wolke schiebt sich vor die Sonne) 
sollte das System verkraften können.

Welche Algorithmen können so etwas leisten?
Könnte man so etwas mit OpenCV realisieren?

von mr. mo (Gast)


Lesenswert?

Wenn sich die Szene nicht ändert, dann hätte eine Subtraktion mit 
Schwellwert (evtl. einfaches Filtern ...) wahrscheinlich gereicht.

Da sich die Perspektive leicht ändert hört sich das nach einer 
sportlichen Aufgabe an. Wenn du mehrere Bilder der Szene hast, könnte 
die "background subtraction method" von OpenCV vielleicht interessant 
sein.

siehe: 
http://docs.opencv.org/trunk/doc/tutorials/video/background_subtraction/background_subtraction.html

Habe ich bereits selber zur dynamischen Objekterkennung genutzt, ist 
einfach zu implementieren und funktioniert super. Aber bei deiner 
Anwendung mit der Änderung der Szene wird das, meiner Einschätzung nach, 
eine schwere Aufgabe.

von Manuel (Gast)


Lesenswert?

Mir würde dazu auf die Schnelle die folgende Vorgehensweise einfallen:

Angenommen du hast 2 Bilder von der gleichen Szene mit leicht 
veränderter Perspektive. Zuerst müsste man den Unterschied in der 
Perspektive bereinigen, dh. eines der beiden Bilder so transformieren 
das man es über das andere legen kann. Die Vorgehensweise ist dabei 
ähnlich jener bei der erstellung eines Panoramas. Dazu gibt es natürlich 
mehrere Möglichkeiten. Eine davon wäre einen Feature Detector (z.B. 
SIFT) auf beide Bilder anzuwenden, gleiche Deskriptoren zu suchen, und 
daraus die Transformation abzuleiten.

Was das eigentliche detektieren der Unterschiede angeht bin ich ganz bei 
mr. mo. Subtraktion mit Schwellwert ist eine sehr einfache Methode die 
in diesem Fall denke ich durchaus erfolgreich ist. Bezüglich Unterschied 
in der Helligkeit kann man sich natürlich noch weidere Schritte 
überlegen (zB könnte man die Luminanzkanäle vergleichen)...

Ich empfehle dir auf jeden Fall mal in Szeliski's Buch zu stöbern. Is 
hier http://szeliski.org/Book/ frei verfügbar und meiner Meinung nach 
DAS Standardwerk bezüglich Computer Vision.

OpenCV ist sicherlich nicht verkehrt. Ich selbst verwende sehr gerne 
vlfeat http://www.vlfeat.org/

von funky (Gast)


Lesenswert?

ImageMick bietet einen Compare-Algorithmus an.
Hab damit aber selber noch nicht gearbeitet, keien Ahnung wie gut das 
funktioniert.


hier hat das jemand mit PHP gemacht, evtl liefert das paar Ideen(eigener 
Algorithmus)
http://www.powerdev.de/?p=202

Das Bild deutlich weichzeichnen und dann skalieren klingt aber erstmal 
nach einer guten Massnahme. Wenn du dann Pixel für Pixel vergleichst, 
hast du ja einen Median-Filter angewandt

OpenCV ist soweit ich das sehe nicht die verkehrte Wahl, aber du musst 
die Algorithmen selber kombinieren. Eine vernünftige, fertige Compare 
Funktion gibt wohl nicht

von uwe (Gast)


Lesenswert?

Mit Parallelblick angucken im mittleren Bild sind die Unterschiede dann 
halbtransparent. Funktioniert sowohl mit 2D Fehlersuchbildern als auch 
mit §D bildern mit perspektivischem versatz und auch mit nicht §D 
Bildern mit Versatz. Was das Gehirn alles kann...

von photo (Gast)


Lesenswert?

Es gibt in der Fotographie-Bearbeitung ein Verfahren um aus mehreren 
fast gleichen Bildern z.b. Personen die rumlaufen rauszurechnen, 
vielleicht hilft dir das weiter.

z.B.

http://toomanyadapters.com/how-to-remove-people-travel-photos-photoshop/

http://creativetechs.com/tipsblog/remove-unwanted-people-from-public-photos/

von Jim C (Gast)


Lesenswert?

Imagemagick berechnet dir die Unterschiede.

Für den numerischen Vergleich gibt es Hash-Algorithem, die mehr oder 
weniger robust sind. Einen Beitrag und Vergleiche findest du hier: 
http://www.hackerfactor.com/blog/index.php?/archives/529-Kind-of-Like-That.html

Ich habe mal dHash benutzt und zur Bewertung die Hamilton-Distanz und 
war nach leichten Anpassungen sehr zufrieden

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.