sensor_auto_gain_control.py
# Dieses Werk ist unter der MIT-Lizenz lizenziert.
# Copyright (c) 2013-2023 OpenMV LLC. Alle Rechte vorbehalten.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Automatische Sensor-Gain-Steuerung
#
# Dieses Beispiel zeigt, wie sich der Gain des Sensors steuern lässt,
# mithilfe des Algorithmus zur automatischen Gain-Steuerung.
# Was ist der Unterschied zwischen Gain- und Belichtungssteuerung?
#
# Nun, durch Erhöhen der Belichtungszeit für das Bild erhalten Sie mehr
# Licht auf der Kamera. Dies liefert das beste Signal-Rausch-Verhältnis. Sie
# möchten die Belichtungszeit im Allgemeinen immer erhöhen ... außer wenn Sie
# die Belichtungszeit erhöhen, verringern Sie die maximal mögliche Bildrate,
# und wenn sich etwas im Bild bewegt, wird es bei einer
# höheren Belichtungszeit stärker verwischt. Die Gain-Steuerung ermöglicht es, die Ausgabe pro
# Pixel mithilfe analoger und digitaler Multiplikatoren zu erhöhen ... dies verstärkt jedoch auch
# das Rauschen. Daher ist es am besten, die Belichtung so weit wie möglich zu erhöhen
# und anschließend die Gain-Steuerung zu verwenden, um den restlichen Unterschied auszugleichen.
# Dies lässt sich erreichen, indem eine Gain-Obergrenze für die automatische
# Gain-Steuerung festgelegt wird. Sobald dies eingestellt ist, muss der Algorithmus
# die Belichtungszeit erhöhen, um den Gain-Bedarf zu decken, anstatt den Gain
# dafür zu verwenden. Dies geht jedoch auf Kosten einer stärker variierenden Belichtungszeit,
# wenn sich die Beleuchtung ändert, im Vergleich dazu, dass die Belichtung konstant bleibt und
# sich stattdessen der Gain ändert.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # Sensor zurücksetzen und initialisieren.
csi0.pixformat(csi.RGB565) # Pixelformat auf RGB565 (oder GRAYSCALE) setzen
csi0.framesize(csi.QVGA) # Framegröße auf QVGA (320x240) setzen
# Die Gain-dB-Obergrenze liegt beim OV7725-Sensor bei maximal etwa 24 dB.
csi0.auto_gain(True, gain_db_ceiling=16.0) # Standard-Gain.
# Hinweis! Wenn Sie die Gain-Obergrenze niedrig einstellen, ohne den Zielwert der
# Belichtungssteuerung anzupassen, erhalten Sie lediglich starke Schwankungen der
# Belichtungssteuerung, sofern diese aktiviert ist.
csi0.snapshot(time=2000) # Warten, bis die Einstellungen wirksam werden.
clock = time.clock() # Ein Clock-Objekt erstellen, um die FPS zu verfolgen.
while True:
clock.tick() # Aktualisiert die FPS-Uhr.
img = csi0.snapshot() # Nimmt ein Bild auf und gibt es zurück.
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)