sensor_auto_gain_control.py
# Questo lavoro è concesso in licenza MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tutti i diritti riservati.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Controllo automatico del guadagno del sensore
#
# Questo esempio mostra come controllare il guadagno del sensore
# usando l'algoritmo di controllo automatico del guadagno.
# Qual è la differenza tra il controllo del guadagno e quello dell'esposizione?
#
# Aumentando il tempo di esposizione dell'immagine si ottiene più
# luce sulla fotocamera. Questo garantisce il miglior rapporto segnale/rumore. In
# generale si vuole sempre aumentare il tempo di esposizione... tranne quando
# aumentando il tempo di esposizione si riduce il framerate massimo possibile
# e se qualcosa si muove nell'immagine inizierà a sfocarsi maggiormente con un
# tempo di esposizione più alto. Il controllo del guadagno consente di aumentare l'output per
# pixel usando moltiplicatori analogici e digitali... tuttavia amplifica anche il
# rumore. Quindi è meglio lasciare che l'esposizione aumenti il più possibile
# e poi usare il controllo del guadagno per recuperare il resto.
# È possibile ottenere ciò impostando un limite massimo di guadagno sull'algoritmo
# di controllo automatico del guadagno. Una volta impostato, l'algoritmo dovrà
# aumentare il tempo di esposizione per soddisfare le esigenze di guadagno, invece di usare il guadagno
# per farlo. Tuttavia, questo ha il costo di una maggiore variazione del tempo di esposizione
# quando l'illuminazione cambia, rispetto ad avere l'esposizione costante e
# il guadagno che varia.
import csi
import time
csi0 = csi.CSI()
csi0.reset() # Resetta e inizializza il sensore.
csi0.pixformat(csi.RGB565) # Imposta il formato pixel su RGB565 (o GRAYSCALE)
csi0.framesize(csi.QVGA) # Imposta la dimensione del fotogramma su QVGA (320x240)
# Il limite massimo di guadagno in db arriva a circa 24 db per il sensore OV7725.
csi0.auto_gain(True, gain_db_ceiling=16.0) # Guadagno predefinito.
# Nota! Se si imposta il limite di guadagno troppo basso senza regolare il valore obiettivo
# del controllo dell'esposizione, si otterranno solo molte oscillazioni dal controllo
# dell'esposizione, se è attivo.
csi0.snapshot(time=2000) # Attendi che le impostazioni abbiano effetto.
clock = time.clock() # Crea un oggetto clock per tracciare gli FPS.
while True:
clock.tick() # Aggiorna il clock degli FPS.
img = csi0.snapshot() # Scatta una foto e restituisce l'immagine.
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)