CMos-Kameras synchronisieren?

Andreas Koch <nospam@kochandreas.com> wrote:

Hallo zusammen,

für eine 3D-Sicht überlege ich, das Videosignal zweier
identischer billiger CMos- oder CCD-Kameras auszuwerten.

Hallo,

muss das Bild eigentlich in Farbe sein? Wenn nein, denk mal über
Folgendes nach: nimm 2 Objektive mit je einem Rot- und Blaufilter,
überlagere die beiden Bilder mit halbdurchlässigen Spiegeln auf einem
Kamerachip. Durch die enge räumliche Verschränkung der R-, G- und
B-Pixel einer Farbkamera dürften die zeitlichen Differenzen der
Teilbilder minimal sein ... ?

Frank

P.S. wenn du gar 3 Objektive (R-G-B) in einer Dreiecksanordnung nimmst,
wird der Sensor sogar vollständig 3D-tauglich, nicht bloß horizontal.
 
Andreas Koch wrote:

Also wenn du von einer Stereo-Brille redest, wo ein Video ein
paar komplette Bilder hinterherlaggt... ich denke, erst mal
siehts schief aus bis man sich dran gewöhnt hat.
Warum gleich ein paar Bilder hinterher? Egal. Hier eine kleine
Auflistung:

Ich kenne beispielsweise eine Schiel-Methode nahezu ohne Hilfsmittel,
bzw. mit einem Stück Pappe in der Mitte, um die Bilder für die Augen zu
trennen. Das ist schon bei Standbildern sehr gewöhnundsbedürftig und
macht eher erst einmal schwindelig.

Dann kenne ich die Filterung mittels Rot-Grün-Farbbrillen. Funktioniert,
sieht aber affig aus und ermöglicht nur rot-grün eingefärbte
Schwarz-Weiß-Bilder.
Dann gab es andere Farbbrillen, die Farbsehen ermöglichen und 3D nur
während starker Bewegungen und Kameraschwenks möglich machen. Das gibt
einen eher schwachen 3D-Effekt, nötigt den Kameramann zur Dauerzappelei
und benötigt AFAIR ebenfalls keine Eingewöhnungszeit. Eine Totgeburt,
IMHO, auch wenn es eine Weile lang an den Konsumenten gebracht und im TV
getestet wurde. Für nicht bewegte Bilder natürlich absolut unbrauchbar
und damit genauso für technische Anwendungen. Diese Methode war reine
Spielerei.

Meine bisher beste Lösung für zuhause: Shutterbrille mit 2 LCD-Gläsern,
die sich verdunkeln können am Computer: Hier wird immer abwechselnd ein
Bild auf das linke Auge gebracht, dann wird das linke Auge verdunkelt,
der LCD-Shutter für das rechte Auge geöffnet, ein anderes Bild auf das
rechte Auge gebracht usw. Der Nachteil hier: Der Monitor muß schnell
sein und eine hohe Bildwiederholfrequenz haben, denn er sendet im
Wechsel zwei unterschiedliche Bilder. Außerdem kommt es zu
Geisterbildern, deren Stärke davon abhängt, wie gut und schnell der
LCD-Shutter abdunkelt (und wie schnell der Monitor das Bild wechseln
kann). Daß jedes Auge abwechselnd sieht, stört nicht und merkt man auch
gar nicht. Was man jedoch merkt, ist ein stärkeres Flimmern dadurch, daß
jedes Auge nur die halbe Bildwiederholfrequenz sieht. Das heißt, ein
100Hz-Monitor wird zu einem 50Hz-Monitor. Nötig (bei der kommerziellen
Lösung) ist ein IR-Sender, um den Shutter mit dem Monitorbild zu
synchronisieren, damit der Shutter das jeweils richtige Bild auf das
jeweils richtige Auge bringt und eine Grafikkarte, die den Sender
unterstützt, sowie die Brille selbst. Kabellösungen statt IR gab es
auch. Die 3D-Effekte unterscheiden sich nicht vom natürlichen Sehen,
einzig das Ignorieren der Geisterbilder braucht evtl. etwas
Eingewöhnungszeit. Diese können am Anfang, oder bei kontrastreichen
Bildern das 3D-Sehen stören. Daß die Bilder zeitlich versetzt und nicht
gleichzeitig ins Auge gelangen, stört das Gehirn abgesehen vom Flimmern
wenig. Schließlich ist das ganze System träge und merkt sich die Bilder
ein paar ms lang. Insbesondere das Sehzentrum reagiert nur träge auf
Helligkeitsänderungen. Wichtig bei der Shuttermethode: Der richtige
Abstand zum Monitor. Sonst passen die Unterschiede der Stereobilder
nicht zur Bildgröße. Im Treiber gibt es Einstellungen hierzu, sofern der
Computer die Bilder selbst berechnet.

Eine wohl noch bessere Lösung: Eine Brille mit 2 eingebauten
LCD-Monitoren. Einen für das rechte Auge, einen für das Linke. Nachteil:
Groß, schwer, teuer. Man sieht bei den meisten "Brillen" die Umgebung
nicht.

Das letzte, das mir gerade einfällt: LCD-Monitore, die je nach
Blickwinkel zwei verschiedene Bilder darstellen. Der Proband muß seinen
Kopf dann ganz exakt an eine ganz bestimmte Stelle positionieren, oder
ein Gerät muß in Echtzeit feststellen, wo der Kopf des Probanden sich
gerade befindet.
Diese Variante habe ich im RL noch gar nicht gesehen.

Gruß Lars
 
On Mon, 16 Jan 2006 20:38:12 +0100, Andreas Koch wrote:
Ich kenne mich in keinster Weise mit Stereo-Vision aus :-D
Ojeh. Dann gebe ich Dir lieber noch ein paar Hinweise:

Der Ansatz, die Zeilen aus einem CCD/CMOS Sensor direkt in einen
Stereo-Matcher zu füttern wird iA grob schiefgehen. Du wirst zwar
durchaus "irgendein" Ergebnis bekommen, jedoch wird die Qualität
sehr schlecht sein (verglichen damit, was eigentlich möglich ist
und was man erwarten würde).

Die meisten Stereo-Matcher reagieren sehr empfindlich auf Fehler
in den Eingangsdaten, sobald die Bilder auch nur um wenige Pixel
verschoben sind, bricht die Performance drastisch ein. Stereo-Matcher,
die direkt im Bildbereich arbeiten, reagieren ausserdem recht
empfindlich auf Helligkeitsunterschiede in beiden Bildern. Du
musst also auch noch die Helligkeit beider Kameras gegeneinander
anpassen. Alternativ kann man einen Stereo-Matcher nehmen, der
im Frequenzbereich arbeitet (zB einfach einen Edge-Detector über
die Daten laufen lassen), diese Algorithmen haben dann aber wieder
ganz andere Probleme...

Nun die wichtigsten Grundlagen zu Stereo-Vision:

- Das Matching beider Stereo-Bilder findet entlang sogenannter
Epipolen statt, nicht entlang der Pixel im Kamera-Bild. Google
dazu einfach mal nach Epipolargeometrie.

- Bei realen Linsensystemen hast Du immer irgendwelche radialen
und/oder tangentialen Verzerrungen. Das führt dazu, daß die
Epipole dann im Kamerabild keine Geraden mehr sind, sondern
gekrümmt sind (Extrembeispiel: Fischaugen-Objektiv). Gute
Optiken weisen rund um das optische Zentrum (rund um die
Bildmitte) kaum Verzerrungen auf. Somit hast Du eine gewisse
Chance, auch ohne Linsenentzerrung wenigstens in der Bildmitte
ein halbwegs brauchbares Ergebnis zu bekommen. Bei einer
Billigkamera (zB USB Webcam für EUR 19.99) würde ich mich
darauf allerdings nicht verlassen.

- Durch Fertigungstoleranzen etc. wird das optische Zentrum zweier
Kameras selten an der selben (Pixel-) Position sein.
Achja: die Brennweite von 2 Objektiven stimmt übrigens
auch nur recht selten exakt überein.

- Ebenfalls durch Fertigungstoleranzen, aber auch durch Toleranzen
bei der Montage beider Kameras ist es kaum möglich die beiden
CCDs/CMOS Sensoren so anzuordnen, daß sie in der selben Ebene
liegen und dann auch noch die Sensor-Zeilen auf jeweils einer
Geraden.

Um all diese Punkte in den Griff zu bekommen, macht man eine
Kamera Kalibrierung. Dabei werden sowohl die intrinsischen Parameter
der beiden Kameras errechnet (also Linsenverzerrungen, Brennweite,
Position des optischen Zentrums) als auch die extrinsischen Parameter
(Position beider Kameras gegeneinander, ergibt eine Rotationsmatrix
und einen Translationsvektor).

Wirf mal einen Blick auf die Matlab Camera Calibration Toolbox,
dort gibt's auch Links zu weiterführenden Informationen:
http://www.vision.caltech.edu/bouguetj/calib_doc/

Einen Überblick über aktuelle Stereo-Matcher Algorithmen findest
Du auf http://www.middlebury.edu/stereo unter "Results" gibt's
Links auf die Papers.

Für eigene Experimente am PC kannst Du auch einen Blick auf die
OpenCV werfen, dort ist (IIRC) der Birchfield Algorithmus
implementiert.

so long,

Hias
 
Hallo,

Henning Paul schrieb:
Alex Wenger schrieb:

Quarz der einen Kamera ablöten und Eingangspin mit dem
Ausgangspin der anderen Kamera verbinden, eventuell einen
Schmitttriger dazwischen

Ergibt 180° Phasenverschiebung. Zwischen XTAL-In und -Out sitzt
üblicherweise ein CMOS-Inverter.
Ja, und?

Ein halber Takt ist für den Anwendungsfall nun wirklich egal. So genau
wird es sowieso nicht.


Marcel
 
On Tue, 17 Jan 2006 08:51:25 +0100, Frank Esselbach wrote:
muss das Bild eigentlich in Farbe sein? Wenn nein, denk mal über
Folgendes nach: nimm 2 Objektive mit je einem Rot- und Blaufilter,
überlagere die beiden Bilder mit halbdurchlässigen Spiegeln auf einem
Kamerachip. Durch die enge räumliche Verschränkung der R-, G- und
B-Pixel einer Farbkamera dürften die zeitlichen Differenzen der
Teilbilder minimal sein ... ?
Je nach Anwendung ist die räumliche Aufteilung der R/G/B Pixel
durchaus ein Problem (vor allem bei Kanten mit starkem Kontrast).
Siehe zB auch den Aufwand, den Digitalkameras treiben um aus den
Rohdaten das R/G/B Pattern halbwegs brauchbar rauszurechnen.

P.S. wenn du gar 3 Objektive (R-G-B) in einer Dreiecksanordnung nimmst,
wird der Sensor sogar vollständig 3D-tauglich, nicht bloß horizontal.
Für 3D braucht man nur 2 Kameras. Damit bekommst Du für (fast) jeden
X/Y Pixel eine Z Koordinate.

Mehr als 2 Kameras kann man zB dann verwenden, wenn es Probleme mit
Verdeckungen o.ä. gibt. Dafür handelt man sich dann aber wieder
ganz neue Probleme ein, nämlich beim Zusammenführen der einzelnen
(paarweise generierten) 3D Daten.

so long,

Hias
 
Matthias Reichl wrote:
Ich kenne mich in keinster Weise mit Stereo-Vision aus :-D

Ojeh. Dann gebe ich Dir lieber noch ein paar Hinweise:
<Snip>

Danke für die vielen guten erschlagenden Infos :)

Ich hatte daran gedacht,vertikale Kanten (also scharfe
Kontrastübergänge) miteinander zu vergleichen. Oder wenn
alles versagt, wie die billigen 3D-Scanner vielleicht
ein Lichtraster projezieren.
(Anmerkung : Ich will keine Objekte digitalisieren, es
geht hier eher um eine Umwelterkennung für einen Roboter ;-) )

Aber bevor ich da auch nur in die Nähe eines Lötkolbens komme
wird das natürlich erstmal virtuell am PC evaluiert...
 
Frank Esselbach wrote:

muss das Bild eigentlich in Farbe sein?
Stimmt, die Idee ist gut. FBas zu decodieren wird der uC zwar nicht
hinkriegen, aber mit einem RGB-Decoderchip könnte es gehen.
Allerdings fürchte ich dann wird der optomechanische Aufbau
etwas komplex...
 

Welcome to EDABoard.com

Sponsor

Back
Top