2012-04-11 11 views
2

alle!Bewegungserkennung in komprimierter Domäne (JPEG/Mpeg4/H264)

Ich verarbeite Video von IP-Kameras und habe einen Bewegungserkennungsalgorithmus basierend auf dekomprimierter Videoanalyse geschrieben. Aber ich bin wirklich etwas schneller. Ich habe mehrere Artikel über die Analyse komprimierter Domänen gefunden, konnte jedoch keine Implementierungen finden. Kann mir jemand einen Code empfehlen?

gefundene Materialien:
http://www.ist-live.org/intranet/school-of-informatics-university-of-bradford001-7/41410206.pdf/view
http://doc.rero.ch/lm.php?url=1000,43,4,20061128120121-NA/Bracamonte_Javier_-_A_Low_Complexity_Change_Detection_Algorithm_20061128.pdf

+0

Versuchen Sie Bewegungen in Videostreams oder JPEG-Frames zu erkennen? Es ist nicht so schwierig, Bewegung in den P- und B-Frames eines komprimierten Videostreams zu erkennen, da das einzige, was komprimiert wird, die Frame-zu-Frame-Änderungen sind. Eine Reihe von JPEG-Bildern ist eine andere Geschichte, da jedes Bild vollständig intra-komprimiert ist. Die Arbeit mit dem Frequenzbereich von JPEG-Bildern wäre eine Herausforderung, aber ich nehme an, Sie könnten die Summe der absoluten Unterschiede zwischen den Bildern für jede MCU überprüfen. Die Summen und Positionen der Änderungen würden Sie auf Bewegung hinweisen. – BitBank

+0

Ja, ich erkenne Bewegung in Videostreams von IP-Kameras. Video-Stream kann einer von drei populären Typen sein: MJPEG (JPEG-Bildserie, aber wie ich weiß, ist es immer noch möglich, Änderungen zwischen ihnen ohne vollständige Neukomprimierung zu erkennen), MPEG4 und H.264. Es wäre gut, mit einem der angegebenen Stream-Typen zu beginnen. – paft

Antwort

2

Ich hatte Bewegung in H.264-Video zu erfassen, und für mich die Rahmengröße war ein wirklich guter Indikator.

I verwendet ffprobe (aus dem ffmpeg-Projekt) Rahmengrößen wie folgt zu exportieren:

./ffprobe -show_frames -pretty video.mp4 | grep 'size' | grep -o '[0-9]*' > sizes.txt

In meinem Fall keine Bewegung bedeutete größer I-Frames (für mich, jeden 30. Rahmen war ein I-Frame) und kleinere Größen für einige der Frames dazwischen.

Ich bin neu in der Videokodierung, also denke ich, dass diese Dinge sehr abhängig von Kodierung und Art des Videosignals sein können, aber es ist einen Blick wert, da es sehr schnell auszuprobieren ist. Exportiere Rahmengrößen und schaue dir z.B. Matlab.


Edit: Am Ende habe ich das Video erneut codiert, so dass jeder zweite Rahmen ein I-Frame war, da dies eine bessere zeitliche Auflösung gab. Eine Idee, die ich nicht getestet habe, war, das Video umzukehren und dasselbe zu tun. Dies sollte genauere Schätzungen darüber geben, wann die Bewegung begann/endete, ähnlich wie das Entfernen der Phasenverzögerung durch Vorwärts-Rückwärts-Filterung.

Verwandte Themen