sensor_auto_gain_control.py

# Esta obra está licenciada bajo la licencia MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos los derechos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Control automático de ganancia del sensor
#
# Este ejemplo muestra cómo controlar la ganancia del sensor
# usando el algoritmo de control automático de ganancia.

# ¿Cuál es la diferencia entre el control de ganancia y el de exposición?
#
# Bueno, al aumentar el tiempo de exposición de la imagen, se obtiene más
# luz en la cámara. Esto le da la mejor relación señal-ruido. Usted
# en general siempre querrá aumentar el tiempo de exposición... excepto que, al
# aumentar el tiempo de exposición, disminuye la velocidad de fotogramas máxima posible
# y si algo se mueve en la imagen, comenzará a desenfocarse más con un
# tiempo de exposición más alto. El control de ganancia le permite aumentar la salida por
# píxel usando multiplicadores analógicos y digitales... sin embargo, también amplifica
# el ruido. Por lo tanto, es mejor dejar que la exposición aumente tanto como sea posible
# y luego usar el control de ganancia para compensar el resto.

# Podemos lograr lo anterior estableciendo un límite máximo de ganancia en el algoritmo
# de control automático de ganancia. Una vez establecido, el algoritmo tendrá que
# aumentar el tiempo de exposición para satisfacer cualquier necesidad de ganancia en lugar de usar la ganancia
# para hacerlo. Sin embargo, esto tiene el costo de que el tiempo de exposición varíe
# más cuando cambia la iluminación, en lugar de mantener la exposición constante y
# cambiar la ganancia.

import csi
import time

csi0 = csi.CSI()
csi0.reset()  # Restablecer e inicializar el sensor.
csi0.pixformat(csi.RGB565)  # Establecer el formato de píxel a RGB565 (o GRAYSCALE)
csi0.framesize(csi.QVGA)  # Establecer el tamaño de fotograma a QVGA (320x240)

# El límite de ganancia en dB alcanza un máximo de aproximadamente 24 dB para el sensor OV7725.
csi0.auto_gain(True, gain_db_ceiling=16.0)  # Ganancia predeterminada.

# ¡Nota! Si establece el límite de ganancia demasiado bajo sin ajustar el valor objetivo
# del control de exposición, obtendrá mucha oscilación por parte del control de
# exposición si está activado.

csi0.snapshot(time=2000)  # Esperar a que los ajustes surtan efecto.
clock = time.clock()  # Crear un objeto clock para registrar los FPS.

while True:
    clock.tick()  # Actualizar el reloj de FPS.
    img = csi0.snapshot()  # Tomar una foto y devolver la imagen.
    print(
        "FPS %f, Gain %f dB, Exposure %d us"
        % (clock.fps(), csi0.gain_db(), csi0.exposure_us())
    )

results matching ""

    No results matching ""