Kamerasensor

#Einleitung

Da mich die Technik hinter einer Digitalkamera sehr fasziniert, möchte ich mich hier mal zu dem Thema auslassen. Einfach ausgedrückt ist sie nix weiter, als ein Wandler von Licht zu elektrischen Signalen (also das Gegenteil eines Displays). Prinzipiell werden dafür lichtempfindliche Halbleiter verwendet.

Die 2 gebräuchlichsten sind:

CCD (Charge-coupled Device)
Der Lichteinfall erzeugt im Halbleiter eine elektrische Ladung. Je länger der Lichteinfall andauert, desto mehr steigen die Ladungen an. Dann wird zum Auslesen entweder der Lichteifall durch einen Shutter unterbunden, oder die Ladungen werden Parallel in Speicherzellen verfrachtet. Von dort wird ausgelesen und verstärkt. Sie haben eine variable Belichtungszeit, was der Bildqualität bei wenig Licht zugutekommt. Allerdings kann die Ladung auch so weit ansteigen, dass sie auf benachbarte Ladungspakete überspringt (Blooming Effekt). Dagegen gibt es auch Technische Maßnahmen, die aber die Linearität der Ladung (im Verhältnis zum Licht) beeinflusst. Insgesamt sind die Chips etwas Teurer als CMOS Sensoren, eignen sich aber besser, wenn die Belichtung gering ist.
CMOS (Complementary Metal Oxide Semiconductor)
Der Lichteinfall beeinflusst die Leitfähigkeit eines Halbleiters und diese wird dann direkt gemessen und verstärkt. Bei geringem Licht ist die Leitfähigkeit entsprechend gleichbleibend gering. Um bei wenig Licht ein gutes Bild zu machen, werden mehrere Messwerte einfach addiert. Das führt aber andererseits dazu, dass das Bild "Nachzieht" und die Farbwerte verfälscht werden. Beispiel: ein Sensor kann einen Messwert von 0-100% Beleuchtung liefern. Der eine Pixel erzeugt z.B. 5%, der daneben 6%. Wenn man das nun 5 fach verstärkt, hat man einen Pixelwert von 25 der daneben 30. So kommt es vor allem beim "Nachmodus" vieler Kameras dazu, dass einzelne Pixel plötzlich farblich hervorstechen. Es ist dann von Sensor zu Sensor unterschiedlich, wie dieser Effekt auftritt. Da CMOS Sensoren aber günstiger zu Produzieren sind verdrängen die die CCDs mehr und mehr. Außerdem kann man in der Signalverarbeitung gegen einige Effekte vorgehen. So kann man einen Mittelwert für jeden Pixel bilden, der aus den 8 ihm umgebenden Pixelwerten besteht. Dadurch kann man einzeln hervorstechende Farbpixel mit einem Offset allen anderen angleichen. Gerade bei günstigen Kameras wird aber auf eine solche Bearbeitung verzichtet.

#Farbwahrnehmung

Die lichtempfindlichen Halbleiter erzeugen am Ende nur eine Information über die Helligkeit es Lichts.
Um zusätzlich eine Farbinformation zu erhalten, werden verschiedene Farbfilter vor die Sensorpunkte gebracht. Dann werden mehrere Sensorpunkte (meistens 4) zu einem Verbund zusammen geschlossen... dem letztendlichen Farbpixel. Es entstehen also 4 Signale, einer für jede Farbe (grün meistens doppelt, wegen der Farbwahrnehmung des Menschen: Sehzellen), die dann zu einem Pixelwert kombiniert werden.
Das gleiche System (nur umgekehrt) findet man auf Bildschirmen. Ein roter, ein grüner und ein blauer Streifen ergeben ein Rechteck... den eigentlichen Pixel. Die Mischung dieser Lichter ergibt den letztendlichen Farbton.
Dafür gibt es viele verschiedene Formen, von denen der Bayer Pattern einer der gebräuchlichsten ist.

Nachtrag:
offenbar werden ehr selten 4 Pixel zu einem Farbpixel, stattdessen werden alle Pixel verwendet um die Intensität zu erfassen, die Farbe wird nachträglich auf die Pixel rekonstruiert.

Die folgenden Bilder zeigen allerdings den 4 zu 1 Farbpixelansatz.


Bayer Pattern (Info)

Wurde nach seinem Erfinder benannt und erzeugt gleichmäßige Farbinformationen. Jeder Pixel besteht aus 4 Sensoreinheiten, 2 für grüne und jeweils eine für rot und blau.


Alternativ RGB Pattern

Diese Alternative ist nicht mehr ganz so gleichmäßig, lässt sich aber leichter herstellen, da die Filter größer sind und dadurch weniger auf einen Sensor aufgebracht werden müssen.


CYGM Pattern (Info)

CYM sind ja schon vom Farbdrucker bekannt. Diese Anordnung führt zu besseren Helligkeitsinformationen, dies aber auf Kosten der Farbtiefe. Es lässt sich einfacher in den YCbCr Farbraum rumrechnen und wird eher bei JPEG Kameras benutzt.


Monochrom

Ein Sensor mit gleicher Größe hat ohne Farbfilter mehr Pixel, da jedes Sensorfeld direkt einen Pixel liefert. Diese Chips werden entweder in SW Kameras eingesetzt oder in teureren mit 3 Chips (siehe 3CCD / 3CMOS weiter unten).


#IR Filter

Die Halbleiterchips sind fast immer auch im Infrarotbereich empfindlich. Infrarotes Licht wird zwar vom Menschen so gut wie nicht gesehen, es erzeugt aber auf dem Chip dennoch eine Helligkeitsinformation. IR licht durchläuft dabei meistens alle der Farbfilter, weshalb es bei Kameras meistens eher Weiß dargestellt wird. Um daraus resultierende Farbverfälschungen zu verhindern, werden meistens zwischen Linse und Chip IR-Filter eingebaut. CMOS ist empfindlicher für IR als CCD. Meistens handelt es sich um eine bedampfte Glasscheibe, die man nur entfernen braucht. Alle Filter, die ich bisher angetroffen habe, wahren sowas wie Dichroitische Spiegel. Sie ließen das normale Farblicht durch und haben den IR Anteil zurück gespiegelt. Ist auch sinnvoller das ungewollte Licht zurück zu spiegeln, anstatt es absorbieren zu lassen, da dadurch wärme in dem Filter entstehen könnte.

#3CCD / 3CMOS

Technologisch am besten, aber auch am teuersten. Zwischen Linse und IR Filter befindet sich ein (oder mehrere zu einem zusammen gesetztes) Prisma. Dieser optische Block hat einen Eingang und 3 Ausgänge. Durch Lichtbrechung (Dispersion) werden die Anteile des Lichtes in verschiedene Ausgänge verteilt. Einen Ausgang pro Farbe und ein Sensor pro Ausgang.
Dadurch erzeugt jeder Sensor nur das Bild für eine Farbe, was einerseits zu einer höheren Empfindlichkeit gegenüber einem gleichgroßen Einzelsensor führt, da man nur noch eine große Fläche für einen Pixel braucht und nicht mehr 4 kleine. Andererseits entfallen die Verluste in den Farbfiltern. Diese sind zwar gering, aber da.
Weitere Infos: Dichroitisches Prisma

#Prozessor

Die Sensoren haben zwar viele Bildpunkte, aber meist eine recht überschaubare Anzahl an Pins. Anstatt alle Sensoranschlüsse nach außen zu führen, werden diese im Normalfall von einem internen Prozessor verarbeitet. Dieser bekommt über Steueranweisungen seine Betriebsart mitgeteilt. Zum Steuern werden entweder Befehle verwendet, oder man schreibt in Register, auf die der interne Prozessor selbst zugreift. Die einzelnen Farbsignale werden intern zu Pixeln weiterverrechnet. Außerdem entscheidet der Prozessor, welche Pixel übersprungen werden (wenn bzw. eine kleine Auflösung verlangt wird, als die Kamera liefern könnte). Hinzu kommen diverse Berechnungen und Funktionen wie Weißabgleich, Kontrast, Helligkeit, Farbtiefe, Spiegeln des Bildes usw.

#OV7670 Kamera

Die OV7670 ist eine CMOS Kamera, welche ich im Rahmen eines Versuchs mit einem Mikrocontroller etwas genauer kennen gelernt hab. Man bekommt sie für rund 10-20€ bei ebay oder auch anderen stellen.
Technische Daten:

  • Auflösung: 640x480 (VGA)
  • Framerate: 30 fms @ VGA
  • Spannungsversorgung Analog: 2.45V bis 3.0V
  • Spannungsversorgung Digital: 2.45V bis 3.0V (min 1.7V wenn der Digitalkern extra mit 1.8V versorgt wird)
  • Datenbus parallel: 8bit

#Features laut Datenblatt

  • High sensitivity for low-light operation
  • Low operating voltage for embedded portable apps
  • Standard SCCB interface compatible with I2C interface
  • Output support for Raw RGB, RGB (GRB 4:2:2,RGB565/555/444), YUV (4:2:2) and YCbCr (4:2:2)formats
  • Supports image sizes: VGA, CIF, and any size scaling down from CIF to 40x30
  • VarioPixel® method for sub-sampling
  • Automatic image control functions including: Automatic Exposure Control (AEC), Automatic Gain Control (AGC), Automatic White Balance (AWB), Automatic Band Filter (ABF), and Automatic Black-Level Calibration (ABLC)
  • Image quality controls including color saturation, hue, gamma, sharpness (edge enhancement), and anti-blooming
  • ISP includes noise reduction and defect correction
  • Supports LED and flash strobe mode
  • Lens shading correction
  • Flicker (50/60 Hz) auto detection Saturation level auto adjust (UV adjust) Edge enhancement level auto adjust De-noise level auto adjust

#Kameramodule

Kameramodule OV7670

Hier sind 2 Kameramodule, die bei 2 Mikrocontroller Entwicklungsboards mitgeliefert wurden. Die rechte Platine hat eine größere Linse und auf der Platine den FIFO-Speicher, weshalb auch mehr Pins vorhanden sind, als bei der linken Platine, die fast nur den Kamerachip enthält.

#Steuerung

Man teilt der Kamera über interne Register ihren Betriebszustand mit. Dann wird zwar von einem Clocksignal über den Mikrocontroller getaktet, aber die Kamera selbst teilt mit, wenn sie was sendet. Die Kamera übergibt ihre Daten an einen 3M-Bit FIFO Speicher und nicht direkt an den Mikrocontroller.
Dafür gibt es 3 wichtige Steuerleitungen:

PCLK (Pixel Clock)
Taktleitung für die parallele Datenübertragung. Diese Taktleitung steuert den Fifo Speicher, der dann die Bilddaten parallel übernimmt.
HREF (Horizontale Referenz)
Ein Takt bedeutet, dass eine neue Zeile in der Übertragung angefangen wurde.
VSYNC (Vertikale Synchronisation)
Ein Takt bedeutet, dass ein Bild fertig übertragen wurde und jetzt das nächste beginnt.

#SCCB (serial camera control bus)

Ein serieller 2-3 adriger Bus, sehr ähnlich dem I2C. Er enthält eine bidirektionale Datenleitung und eine Taktleitung. Manchmal gibt es eine dritte, die Enable Leitung. Sie funktioniert wie der chip select Pin an diversen Microchips. Bei der OV7670 gibt’s nur Daten und Taktleitung. Verbunden mit dem I2C Bus des Mikrocontrollers (bei 400kHz), können so in die Kameraregister Werte geschrieben werden, die dann die Betriebsart der Kamera festlegen.

#FIFO Speicher

Der verwendete FIFO Speicher (First-In-First-Out) ist sowas wie ein überdimensionales Schieberegister. Die Kamera schickt ihre Daten kontinuierlich an den Speicher.
Ich finde, man kann es sich wie einen Wassereimer mit Zapfhahn und Überlaufventil vorstellen.
Von oben kommt kontinuierlich neues Wasser. Der Eimer füllt sich nach und nach. Wird das Wasser nicht durch den Zapfhahn "abgeholt", dann lässt das Überlaufventil am Boden altes Wasser ab und zwar genau so viel, wie neues nachkommt. Das neuste Wasser ist immer ganz oben, das älteste immer ganz unten. Wenn das Wasser fast genauso schnell durch den Zapfhahn abfließt, wie neues hinzukommt, dann bleibt der Pegel durchschnittlich gleich. Man kann aber auch schnell viel Wasser ablassen und dafür eine längere Pause machen.
Genau dieser Effekt ist der Grund, warum der Speicher eingesetzt wird. Man holt sich ein Bild und stellt es dar. Dann wird abgefragt, ob eine Taste gedrückt wurde oder ähnliche andere Tätigkeiten. Würde die Kamera normal weiter getaktet werden, würden währenddessen Bildinformationen verloren gehen.

#Datenformate

Datenpakete

Beide Kameraboards nutzen das RGB565 Format für einen Pixel und auf Grund der LCD Auflösung wird das QVGA Format (320x240) verwendet. Es werden also 2 Takte benötigt, um einen Pixel zu übertragen. Ich hab auch das RGB555 Format getestet, was zwar symmetrischer ist (von Vorteil bei der Weiterverarbeitung der Signale), hat aber leider ein eher matschiges Bild erzeugt.
Die RAW Formate scheinen nicht so einfach zu sein...
Ich hab auf meinem Entwicklungsboard eine LCD Funktion, die eine Word Variable (16bit) als Signal für einen Pixel braucht (RGB565 Format).
Beim Versuch mit Processed Bayer Raw brauchte ich 1 Takt pro Pixel. Nachdem eine Linie fertig war, musste die jeweils nächste verworfen werden. Das bei der ersten Linie pro Takt erfasste Byte, wurde um 2 Bits gekürzt (die unteren 2 wurden verworfen) und in einer Word Variable (16bit) gespeichert.
Die Oberen 6 der 8 Bit von der Kamera, lagen danach also im grünen Kanal des RGB565 Formats vor. Über den LCD konnte ich dadurch zwar nur schwach grün sehen, aber es reichte um die Funktion zu testen. Wenn ich statt der zweiten Linie die erste verworfen habe und dafür die nächste ausgelesen hab, bekam ich ebenfalls ein Bild aber mit anderen Helligkeitswerten für blau und rot.
Beim Versuch mit Raw RGB brauchte ich ebenfalls 1 Takt pro Pixel. Diesmal wurde aber jede Linie ausgewertet.

Infos zum Kameraboard und dem verwendeten Mikrocontroller: Hier.

© by joe-c, 2023 - 2024. All Rights Reserved. Built with Typemill.