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?
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.
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/
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
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...
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/
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.