sensor_manual_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
#
# Manuelle Sensor-Gain-Steuerung
#
# Dieses Beispiel demonstriert, wie sich der Weißabgleich-Gain des
# des Gains manuell steuern lässt, im Gegensatz 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.
import csi
import time
# Ändern Sie diesen Wert, um den Gain anzupassen. Probieren Sie 10.0/0/0.1/usw.
GAIN_SCALE = 1.0
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
# Gibt den anfänglichen Gain zum Vergleich aus.
print("Initial gain == %f db" % csi0.gain_db())
csi0.snapshot(time=2000) # Warten, bis die Einstellungen wirksam werden.
clock = time.clock() # Ein Clock-Objekt erstellen, um die FPS zu verfolgen.
# Sie müssen die automatische Belichtungssteuerung und den automatischen Weißabgleich deaktivieren,
# da diese sonst die Bildbelichtung ändern und damit alle Gain-Einstellungen rückgängig machen
# die Sie vorgenommen haben ...
csi0.auto_exposure(False)
csi0.auto_whitebal(False)
# Die obigen Einstellungen müssen erst wirksam werden ...
csi0.snapshot(time=500)
current_gain_in_decibels = csi0.gain_db()
print("Current Gain == %f db" % current_gain_in_decibels)
# Die automatische Gain-Steuerung (AGC) ist standardmäßig aktiviert. Der Aufruf der folgenden Funktion
# deaktiviert die automatische Gain-Steuerung des Sensors. Das zusätzliche Argument "gain_db"
# überschreibt dann den automatischen Gain-Wert, nachdem AGC deaktiviert wurde.
csi0.auto_gain(False, gain_db=current_gain_in_decibels * GAIN_SCALE)
print("New gain == %f db" % csi0.gain_db())
# csi0.gain_db() gibt den genauen Gain-Wert des Kamerasensors in Dezibel zurück.
# Dies kann jedoch ein anderer Wert sein als der angeforderte, da
# der Sensorcode den Gain in einen kleinen und einen großen Gain-Wert umrechnet, die
# nicht alle möglichen Werte annehmen können ...
# Wenn Sie den automatischen Gain wieder einschalten möchten, führen Sie aus: csi0.auto_gain(True)
# Beachten Sie, dass der Kamerasensor den Gain dann nach eigenem Ermessen ändert.
# Der Aufruf von: csi0.auto_gain(False)
# deaktiviert lediglich die Aktualisierung des Gain-Werts, ändert jedoch nicht den Gain-Wert,
# den der Kamerasensor als geeignet ermittelt hat.
while True:
clock.tick() # Aktualisiert die FPS-Uhr.
img = csi0.snapshot() # Nimmt ein Bild auf und gibt es zurück.
print(clock.fps()) # Hinweis: Die OpenMV Cam läuft etwa halb so schnell, wenn sie
# mit der IDE verbunden ist. Die FPS sollten sich nach dem Trennen erhöhen.