Wie kann ich zwei Bilder von der Kamera vergleichen und feststellen, ob es genügend Unterschiede gibt, um Bewegungen zu erkennen?


18

Ich möchte mein Telefon als CCTV-System verwenden, um einen Raum in meinem Haus zu steuern und einen Alarm anzuzeigen, wenn sich etwas bewegt.

Im Moment ist es mir gelungen, jede Minute ein Bild aufzunehmen und es über ein PHP-Skript auf meinen Server hochzuladen. Jetzt möchte ich das aktuelle Bild und das Bild vor 1 Minute vergleichen und feststellen, ob jemand den Raum betreten hat. Im Grunde müsste ich also die Unterschiede der Pixel auf dem Bild vergleichen (aber auch berücksichtigen, dass eine Wolke möglicherweise nur Hallo sagt und die Helligkeit innerhalb einer Minute ändert).

Hat jemand eine Ahnung, wie man das erreicht oder ein Dokument zum Lesen?


4
Ich habe so etwas vor Jahren gemacht. Meine Technik bestand darin, das Bild in Abschnitte zu unterteilen, beispielsweise in ein 20 * 20-Raster, einen Wert für die durchschnittliche Farbe in jeder Zelle zu finden (indem die durchschnittliche Farbe in jedem Pixel in dieser Zelle genommen und gespeichert wurde). Machen Sie dasselbe für das nächste Bild und wenn es genug (ich überlasse diese Toleranz Ihnen) Unterschiede in den durchschnittlichen Farben gibt, können Sie Bewegung annehmen. Machen Sie die Toleranz nicht so fein, dass es subtile Änderungen des Lichts oder vorübergehender Schatten usw. bemerken wird

1
Hier ist ein interessanter Beitrag zu diesem Thema, den Sie möglicherweise um

CHDK zerlegt das Bild auch in ein Raster. chdk.wikia.com/wiki/UBASIC/Scripts:_AdaptiveMD Zum Erkennen von Bewegungen und nicht zum Erkennen von Beleuchtungsänderungen würde ich sagen, dass eine Änderung in vielen Gitterzellen keine Bewegung ist, während eine Änderung in nur wenigen Gitterzellen ist.
Endolith

Antworten:


10

Mir scheint, Sie suchen nach einer Hintergrund-Subtraktionstechnik. Bei verrauschten Bildern und wechselnden Lichtverhältnissen kann dies nicht trivial sein. Der derzeitige Stand der Technik hierfür ist die niedrigrangige Matrixdarstellung, für die jedoch nicht zwei, sondern viele (~ Dutzend) Bilder erforderlich sind. Es folgen einige Hochleistungsmathematiken: Jedes Bild, das als Vektor von Pixeln betrachtet wird, Vektoren, die in eine Matrix kombiniert werden, und diese Matrix werden in eine Matrix mit niedrigem Rang und einen Rest zerlegt. Niedrigrangige Matrixspalten sind Hintergründe und der Rest bewegt Objekte. Es gibt einige Open-Source-Implementierungen, jedoch nur für die Faktorisierung selbst, nicht für die vollständige Image-Pipeline-IIRC

Hier ist ein Artikel und ein Code zur Matrixfaktorisierung http://www.ece.rice.edu/~aew2/sparcs.html

Hier ist eine Übersicht vom CS-Blog und ein Link zu anderem Code:

https://sites.google.com/site/igorcarron2/matrixfactorizations

http://nuit-blanche.blogspot.com/search/label/MF

Übersicht über einige andere Techniken: http://www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf


1
hast du dieses CW absichtlich gemacht?
Lorem Ipsum

1
Was bedeutet "CW"?
mirror2image

Ahh, Wiki-Frage. Ich dachte, es wäre eine gute Idee, diese ziemlich neuen Technologien einzuführen, die praktische Dinge tun. Fühlen Sie sich frei, es zu entfernen, wenn Sie nicht einverstanden sind. Auch andere Leute haben vielleicht mehr Erfahrung mit dieser Technologie - ich habe erst angefangen, mich damit zu beschäftigen.
mirror2image

Ein CW ist eine Community-Wiki-Frage. Dies bedeutet, dass Sie keine Reputation (in diesem Fall 4x10 = 40) für die Upvotes Ihrer Antwort erhalten. Einige Leute geben ihre Antworten absichtlich so, aber meistens ist es ein Zufall. Ich habe dies für Sie rückgängig gemacht, damit Sie Ihren Repräsentanten bekommen. Es ist jetzt 181 von 126 :)
Lorem Ipsum

5

Denken Sie daran: Es gibt Schatten (nicht nur Helligkeit).

Ich mag die Idee von James Webster nicht wirklich, da sie im Grunde genommen die Auflösung in jeder Dimension verkleinert und die verkleinerten Bilder vergleicht (auch Schwellenwerte mag ich nicht - sie sind zu willkürlich, man muss sie testen und optimieren bis Sie einen guten Wert erhalten und am nächsten Tag diese Werte aufgrund des unterschiedlichen Wetters oder anderer Umwelteinflüsse veraltet sein könnten)

Aber um fair zu sein, ich habe auch keine wirklich gute Lösung. Meine erste Idee war, jedes Bild mit einem Referenzbild des leeren Raums zu vergleichen und eine Kantenerkennung für das Diff-Bild durchzuführen. Dies würde aber auch Schatten erkennen. Aber ich denke, Sie können nicht zwischen Schatten und anderen Objekten unterscheiden ... zumindest weiß ich nicht wie. Aber vielleicht kannst du das Ergebnis nach der Kantenerkennung zwischen 2 Bildern vergleichen, da sich die Schatten meist langsam bewegen (es wird immer noch Probleme geben, wenn sich Autos vorbeibewegen oder wenn sich eine Wolke vorbeibewegt).


Sie möchten etwas erkennen, das sich plötzlich ändert. Die Schatten ändern sich von einer Minute zur nächsten kaum. Die allgemeine Helligkeit der Sonne wird jedoch.
Endolith

2
Schatten bewegen sich schnell, wenn z. B. ein Auto vorbeifährt und entweder seinen eigenen Schatten durch das Fenster wirft oder Schatten einiger anderer Objekte durch dessen Scheinwerfer wirft.
Philipp Wendt

4

Die "Matrixfaktorisierung" hilft Ihnen NICHT bei Ihrer Arbeit! In dem von @ mirror2image genannten Artikel geht es um die Hintergrundsubtraktion, jedoch NICHT um die "Matrixfaktorisierung".

Das Erkennen von sich bewegenden Objekten (sei es Menschen oder Fahrzeuge) mithilfe von Laufvideos ist ein aktives Forschungsgebiet.

Grundsätzlich schätzt das System einen typischen statischen Hintergrund, indem es mehrere Bilder abtastet und die Energiedifferenz zwischen dem eingehenden Bild und dem Hintergrund misst. Wenn die Energie signifikant ist, wird das Pixel als Vordergrund klassifiziert. Ein solcher Satz von Vordergrund sagt Ihnen, ob es einen Eintrag des Objekts im System gibt.

Der beste Verweis auf Ihr Forschungspapier (und auch relativ einfach, wenn Sie es wirklich implementieren möchten) wäre - W4-System finden Sie hier und sehen Sie Picardi-Papier hier als eine detailliertere Übersicht für andere Techniken im System.

Es gibt viele Herausforderungen, die mit dem Problem verbunden sind:

  1. Das Vorhandensein von Lärm führt zu erheblichen Mehrdeutigkeiten. Der Ansatz besteht darin, eine effiziente zeitliche Filterung anzuwenden und die Varianz des Rauschens zu berücksichtigen, um es immun gegen Schwellenwerte zu machen.

  2. Das Vorhandensein von Schatten erzeugt die Mehrdeutigkeit, weder Vordergrund noch Hintergrund zu sein. Es gibt Papiere, die die Unterscheidung zwischen Farbe und Intensität modellieren, um Schatten und echten Vordergrund zu unterscheiden.

  3. Der Hintergrund kann komplex sein wie das Winken von Bäumen oder Meer usw.

  4. Der Hintergrund kann eine langsame oder plötzliche Änderung der Beleuchtung aufweisen, wobei der zuvor "erlernte" Hintergrund dann an den neuen angepasst wird.

Eines der bekanntesten Beispiele ist der Wall-Flower-Algorithmus. Er zeigt, wie sich verschiedene Szenarien am besten kombinieren lassen, um eine robuste Erkennung sich bewegender Objekte zu erzielen.


2

Ich kenne keine genaue Lösung, aber Sie sollten eine Art Hash des Bildes machen; Ein kleinerer Datensatz, der aus dem Bild extrahiert wurde und der besser als das gesamte Bild ist.

Ich denke, Farbhistogramm ist eine gute Wahl dafür.

Wenn Sie Ihr Bild in Bereiche aufteilen und separate Histogramme für diese Bereiche erstellen, können Sie die Position / den Pfad des Eindringlings bestimmen.


Vielen Dank, ich werde auf andere Lösungen warten, wenn ich keine bessere finde, werde ich Ihre annehmen. Zu Ihrer Information, ich möchte den Pfad des Eindringlings nicht bestimmen, da 1 Minute nicht ausreicht, aber es ist großartig, nur eine Warnung zu senden. Vielen Dank.

1
Seien Sie vorsichtig, einige Eindringlinge könnten in 1 Minute fertig sein! Machen Sie so oft wie möglich eine Kontrolle. Wenn Ihr Programm zu langsam ist, verringern Sie die Bildauflösung.

1
Ja, in der Tat habe ich vor, alle 10s ein Bild zu machen und es nur hochzuladen, wenn ich einen Eindringling erkenne, oder jede Minute, wenn es kein Problem gibt.

1

Es kann hilfreich sein, die Differenz zweimal zu messen, dh die Differenz der Unterschiede. Wenn also die doppelte Ableitung der Pixel in einigen Regionen größer als ein Schwellenwert ist, können Sie dies als Betreten des Raums bezeichnen. Eine Helligkeitsänderung führt zu einem annähernd konstanten Gradienten im gesamten Bild, eine hessische oder doppelte Ableitung liefert jedoch einen guten Hinweis auf Bewegungen oder größere Änderungen im Raum.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.