Forum: Digitale Signalverarbeitung / DSP / Machine Learning Bildverarbeitung: Objektverfolgung und eierlegende Wollmilchsäue


von Christoph a. (chrichri)


Lesenswert?

Morgen,

da ich langsam auf dem Schlauch stehe möchte ich mein Problem hier mal 
schildern:

- Ich habe ein beliebiges Objekt welches sich horinzontal im Bild 
bewegt.
- Der Bereich der horizontalen Bewegung ist unveränderlich.
- Das Objekt hat keine eindetigen Merkmale und kann teilweise verdeckt 
werden.
- Die Position des Objekts soll pixelgenau, wenn möglich subpixelgenau, 
ermittelt werden.
- Das ganze soll schnell sein. (50 bis 100FPS).
- (eierlegende Wollmilchsau)

Ich verwende eine handelsübliche Industriekamera mit Gigabit-Ethernet 
und einen nomalen PC mit OpenCV und FFTW als Library.

Bisher kann ich "triviale" Dinge wie:
- Automatische horizontale ROI (Region of iterest) erkennen und in der 
Kamera setzen.
- Dynamisch eine ROI um das Objekt finden (also ein Auschnitt aus der 
Kamera-ROI)
- Automatisch das Objekt erkennen und als Template ablegen.
- Automatisch den Hintergrund extrahieren. (D.h. das was man sehen würde 
wenn das Objekt nicht da wäre). Dein Hintergrund verwende ich für eine 
Vordergrund-Hintergrund-Vergleich u.a. für die Dynamische ROI um das 
Objekt


Verschiedene Ansätze habe ich getestet:
- "triviales" Template Matching funktioniert gut bei rechtwinklichen 
Templates (keinen Hinterundanteil). Funktioniert nicht sicher bei 
teilweiser Verdeckung des Objektes. Geschwindigkeit mit OpenCV "geht 
so".

- Vordergrund-Hintergrundvergleich: An sich ist die Objekt-ROI schon 
recht genau die Objekt-Position des Objekts. Aber aufgrund von 
Schattenwurd ist der Vordergrund-Hintergrund-Vergleuch an manchen 
stellen auf enige Px ungenau. Außerdem kann die Objekt-ROI wegen anderen 
bewegten Objekten fälschlich größer bestimmt werden als nötig.

- partielles Template Matching (Template wird in sub-Templates 
unterteilt). Idee: nicht jedes Sub-Template muss gefunden werden. So 
können Teile verdeckt sein. Problem: zu langsam und je kleiner das 
Template wird desto ungenauer das Ergebnis. Bei nicht rechtwinkligen 
Templates sind die Ergenisse schlecht bis unbrauchbar.

- optischer Fluss: Ich kann eine Bewegung prinzipiell ermitteln. Ich 
erhalte aber keine absoluten Pixel sondern eine willkürliche 
Größenordnung (Variiert z.b. je nach Anzahl der Flusspunkte trotz 
Mittelwertbildung über bewegte Pixel). Außerdem habe ich einen Drift 
(ich komme nicht wieder im Startpunkt an). Und ich weiß nicht wie ich 
Verdeckung durch bewegte Objekte ausblenden kann.

- "Phasen-Korrelation" (richtiges Wort)? Code und Idee habe ich hier 
geklaut: http://nashruddin.com/phase-correlation-function-in-opencv.html 
Die Relativbewegung zweier gleichgroßer Bilder wird ermittelt. Das 
funktioniert gut mit normalen Bildern, schlecht aber in meinem Fall wo 
sich noch Hintergrundausschnitte im Bild befinden.


Ich bin etwas am Ende meiner Weisheit. Wobei sich Weisheit all das 
nennen kann was ich im Verlauf der beschiebenen Dinge gelernt habe denn 
BV-Erfahrung habe ich sonst keine.

Was gibt es noch für Ideen/Ansätze
Ich wäre für jeden Schubser in eine sinnvolle Richtung dankbar.

Gruß
Christoph

von Uwe (Gast)


Lesenswert?

> - Die Position des Objekts soll pixelgenau, wenn möglich subpixelgenau,
> ermittelt werden.

Die Auflösung des Meßsystems muß mindestens doppelt so hoch sein wie das 
zu messende Objekt bzw. Signal.
Eine einfache Überlegung dazu : wenn ich ein Objekt das so groß wie ein 
Pixel ist zwischen zwei Pixeln auf der CCD abbilde sind beide halb 
aktiv.
Bei Binarisieren kann ich nun den Schwellwert so setzen daß entweder für 
die Größe des Objekts zwei Pixel erkannt werden oder gar keins.

von Bildverarbeiter de Luxe (Gast)


Lesenswert?

Es gibt eine Reihe von papers zu dem Thema, sieh mal in richtung "object 
recognition". Wikipedia hat auf einige links.

hier macht einer Flugzeugverfolgung. Das dürfte auch darauf 
hinauslaufen, partielle Abdeckkungen zu ignorieren.

http://de.wikipedia.org/wiki/Bildverarbeitung

von J. S. (engineer) Benutzerseite


Lesenswert?

Je nach Variation des Objektes brauchst du verschiedene feldweise 
operierende Korrelatoreinheiten mit verschiedenen Ansätzen. Das Ganze 
geht je nach Parameterzahl recht schnell in die Potenzen an 
Rechenoperationen. Wenn Du aber Objektbewegung extrahierst und geschätzt 
hast, kann man es drastisch reduzieren.

Christoph abc schrieb:
> Das ganze soll schnell sein. (50 bis 100FPS).
Habe sowas im FPGA gemacht für den 5D-Fall. Macht 5hoch5 -> 3000 Fälle, 
von denen dann aber nur 3 hoch 5 = 243 Fälle gerechnet werden müssen. 
Bei 200 fps waren das fast 50kHz frame rate, allerdings bei kleinen 
Bildern (320 x 240). Trotzdem waren 24 Recheneinheiten parallel aktiv.

Christoph abc schrieb:
> "triviales" Template Matching funktioniert gut bei rechtwinklichen
> Templates (keinen Hinterundanteil).
Davon wirst Du nicht ausgehen können, schon weil sich das Bild drehen 
kann (Kamerabewegung)

von Christoph a. (chrichri)


Lesenswert?

Uwe schrieb:
> Die Auflösung des Meßsystems muß mindestens doppelt so hoch sein wie das
> zu messende Objekt bzw. Signal.
> Eine einfache Überlegung dazu : wenn ich ein Objekt das so groß wie ein
> Pixel ist zwischen zwei Pixeln auf der CCD abbilde sind beide halb
> aktiv.
> Bei Binarisieren kann ich nun den Schwellwert so setzen daß entweder für
> die Größe des Objekts zwei Pixel erkannt werden oder gar keins.
Danke. Habe ich noch nicht drüber nachgedacht, aber macht Sinn. Die 
Vorgabe kann ich erfüllen. Primär steht aber eh erstmal pixelgenau im 
Vordergrund.


Bildverarbeiter de Luxe schrieb:
> hier macht einer Flugzeugverfolgung. Das dürfte auch darauf
> hinauslaufen, partielle Abdeckkungen zu ignorieren.
Danke. Den Wiki-Atikel kenne ich schon, aber zu der Flugzeugverfolgung 
finde ich nicht mehr als das Bild.


J. S. schrieb:
> Je nach Variation des Objektes brauchst du verschiedene feldweise
> operierende Korrelatoreinheiten mit verschiedenen Ansätzen. Das Ganze
> geht je nach Parameterzahl recht schnell in die Potenzen an
> Rechenoperationen. Wenn Du aber Objektbewegung extrahierst und geschätzt
> hast, kann man es drastisch reduzieren.
Ja der Rechenaufwand ist mein Problem. Und keine Erfahung in der 
Implementierung von BV-Algorithmen. Die OpenCV Funktionen zur 
Korrelation (bzw Template Matching) sind recht gut und schnell, nur 
leider führen Hintergrundanteile im Bild zu falschen Ergebnissen. Der 
Versuch es selber zu Implementieren und eine bekannt Maske auszunutzen 
(ich weiß welcher Teil des Templates zum Objekt gehört und welcher zum 
Hintergrund) ging leider schief bzw ich bin mir noch nicht sicher wie 
ich das richtig im Frequenzbereich mache.



> Christoph abc schrieb:
>> Das ganze soll schnell sein. (50 bis 100FPS).
> Habe sowas im FPGA gemacht für den 5D-Fall. Macht 5hoch5 -> 3000 Fälle,
> von denen dann aber nur 3 hoch 5 = 243 Fälle gerechnet werden müssen.
> Bei 200 fps waren das fast 50kHz frame rate, allerdings bei kleinen
> Bildern (320 x 240). Trotzdem waren 24 Recheneinheiten parallel aktiv.
Gut, ich habe einen normalen PC ;-). Es ist aber nicht so schlimm wenn 
ich die Vorgabe nicht einhalten kann solange der Rest funktioniert.

> Christoph abc schrieb:
>> "triviales" Template Matching funktioniert gut bei rechtwinklichen
>> Templates (keinen Hinterundanteil).
> Davon wirst Du nicht ausgehen können, schon weil sich das Bild drehen
> kann (Kamerabewegung)
Guter Punkt, aber vorerst kann ich den ignorieren. Die Kamera ist fest 
montiert und das Objekt rotiert nicht. Nur die optische Verzerrung 
verfälscht das Bild eigentlich, lasse ich aber erst mal außen vor.

von radar (Gast)


Lesenswert?

Uwe schrieb:
> Die Auflösung des Meßsystems muß mindestens doppelt so hoch sein wie das
> zu messende Objekt bzw. Signal.

Nein, das stimmt nicht. Ein Student hier an der Uni hat z.B. ein 
akkustisches Radar gebaut, mit dem Objekte auf 5 cm genau lokalisiert 
werden können, selbst wenn das Echo nur z.B. 500 Hz gesampelt wird. (In 
dieser Zeit bewegt sich der Schall 60 Zentimeter, und trotzdem ist die 
Auflösung 5 Zentimeter.)

Die von dir genannte Nyquistbedingung (Samplerate doppelt so hoch wie 
die Bandbreite) kann in vielen praktischen Anwendung grob gesagt 
"verletzt" werden. Das liegt daran, dass für die meisten Probleme die 
augenscheinliche Bandbreite (z.B. Signalfrequenz) nicht der für das 
Problem relevanten Bandbreite (z.B. Rate an tatsächlich übermittelter 
Information) entspricht.

von Christoph a. (chrichri)


Lesenswert?

Ich scheitere gerade am Versuch eine Korrelation selber zu scheiben (im 
Frequenzbereich mit FFT und multiplikation)
Ich habe ein kleines Template und ein größeres Bild in dem ich das 
Template finden will.

Was muss ich jetzt machen? Ist nicht meine mathematische Stärke und die 
Angaben im Web variiern.


1. ich betrachte beie bilder als ein 1-dimensionales Signal (Signal a 
und Signal b)
2. Bei Signal a und Signal b den Mittelwert abziehen.
3. das kürzere Sigbal auf Länge des längeren Bringen (Zero-Padding)
4. FFT beider Signale Bilden
5. Elementweise komplexe Multiplikation von Sigal a mit b* (* = komplex 
konjugiuert)
6. invertse FFT
7. Realteil der inversen FFT entsprich meinem Korrelationsergebnis
7. Maxima in Korrelationsergebnis suchen

Stimmt das so?
gruß
Christoph

von Michael (Gast)


Lesenswert?

radar schrieb:
> Nein, das stimmt nicht. Ein Student hier an der Uni hat z.B. ein
> akkustisches Radar gebaut, mit dem Objekte auf 5 cm genau lokalisiert
> werden können, selbst wenn das Echo nur z.B. 500 Hz gesampelt wird.
Was die Schallgeschwindigkeit mit der Abtastung zu tun? Du samplest ja 
die Amplitude und nicht die Gruppenlaufzeit.

von radar (Gast)


Lesenswert?

Michael schrieb:
> radar schrieb:
>> Nein, das stimmt nicht. Ein Student hier an der Uni hat z.B. ein
>> akkustisches Radar gebaut, mit dem Objekte auf 5 cm genau lokalisiert
>> werden können, selbst wenn das Echo nur z.B. 500 Hz gesampelt wird.
> Was die Schallgeschwindigkeit mit der Abtastung zu tun? Du samplest ja
> die Amplitude und nicht die Gruppenlaufzeit.

Die Distanz des Objekts ergibt sich aus der Laufzeit. Diese Laufzeit 
muss also genau bestimmt werden. Beim einfachsten Radar-Setup sendet man 
einen Impuls und misst die Zeit, bis er zurückkommt. Je häufiger man 
misst, desto genauer kann man die exakte Ankunftszeit bestimmen. Die 
Auflösung entspricht dann genau der Zeit zwischen zwei Samples 
multipliziert mit der Schallgeschwindigkeit.

von Uwe (Gast)


Lesenswert?

Na und ! Man kann ein Objekt auch mit 0,05mm lokalisieren wenn man nur 
mit 0.00000001Hz oder was auch immer Sampled. Dein Beispiel ist schlicht 
und ergreifend nicht durchdacht.

von Uwe (Gast)


Lesenswert?

Damit dein Beispiel zu der Sitution passt solltest du die 
Geschwindigkeit des Objektes bestimmen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Ihr redet ein wenig aneinander vorbei. Richtig ist, dass man die 
Objektverschiebungen sehr wohl deutlich unterhalb der Pixelgrösse messen 
kann und zwar theoretisch beliebig genau..

Die Position des Objektes bildet sich in analoger Betrachtung als Phase 
ab und die ist zunächst unabhängig von der Auflösung. Beim Samplen mit 
44kHz Audio wird auch immer wieder verkündet, man könne damit keine 
zeitlichen Änderungen von unter 1/44k s abbilden. Tatsächlich lässt sich 
abgesehen von Jitter und der Amplitudenauflösung jede minimale 
Phasenverschiebung generieren und im umgekehrten Betrachtungsfall auch 
messen.

Praktisch ist es in der BV natürlich so, dass die Pixel einem Rauschen 
unterworfen sind, unterschiedliche gain-offsets haben, optische 
Abbildungsfehler und Beleuchtungsungenauigkeien dazu führen, dass die 
Information schwammig wird.
Je mehr Pixel dann zur Betrachtung herangezogen werden, desto genauer 
wird die Berechung. Man benötigt also eine wachsende Zahl an Samples, um 
Bewegungsvergleiche machen zu können.

Jetzt gibt es zwei Punkte:

Die Samplezahl, die man zur Verfügung hat, um Vergleiche zu vollziehen, 
ist aber limitiert, denn:

1.) "Mehr Samples durch mehr Fläche" liefert irgendwann keine weitere 
Information mehr, weil das Objekt eine endliche Ausdehnung besitzt.

2.) "Mehr Samples durch mehr Auflösung" bringt irgendwann keine 
Verbessung mehr und ist überdies nicht linear in der Verbesserung.

Wesentlich bei der BV ist vor allem die Optik, deren Abbildung und die 
Ruhe der Kamera, wobei man beides (optische Unschärfe und Bewegung) auch 
dazu nutzen kann, die Auflösung zu erhöhen.

Statt ein besonders scharfes Bild auf den Sensor zu werfen, kann es 
sinnvoll sein, eine Unschärfe zu nutzen oder reinzurechnen, um dann 
einen tieffrequenten Phasenvergleich zu vollziehen.

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.