sensor_auto_gain_control.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2023 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# センサー自動ゲイン制御
#
# この例では、自動ゲイン制御アルゴリズムを使って
# センサーのゲインを制御する方法を示します。
# ゲイン制御と露光制御の違いは何でしょうか?
#
# 露光時間を長くすると、より多くの
# 光をカメラに取り込めます。これによりS/N比が最良になります。
# 一般的には露光時間を長くしたいところですが……露光時間を
# 長くすると、最大フレームレートが低下し、
# また画像内で何かが動くと、露光時間が長いほど
# ブレが大きくなります。ゲイン制御を使うと、アナログ・デジタル乗数によって
# ピクセルごとの出力を増加させることができますが……ノイズも
# 増幅されます。そのため、できる限り露光時間を増やしてから、
# 残りをゲイン制御で補うのが最善です。
# 上記は、自動ゲイン制御アルゴリズムに
# ゲイン上限を設定することで実現できます。これを設定すると、アルゴリズムは
# ゲインを使う代わりに、必要なゲイン分を露光時間の増加で補うようになります。
# ただし、この代償として、露光時間を一定にしてゲインを変化させる場合に比べ、
# 照明変化時の露光時間の変動が大きくなります
# (ゲインが変化する場合と比較して)。
import csi
import time
csi0 = csi.CSI()
csi0.reset() # センサーをリセットして初期化します。
csi0.pixformat(csi.RGB565) # ピクセルフォーマットをRGB565(またはGRAYSCALE)に設定します
csi0.framesize(csi.QVGA) # フレームサイズをQVGA(320x240)に設定します
# OV7725センサーの場合、ゲインdB上限は約24dBが最大です。
csi0.auto_gain(True, gain_db_ceiling=16.0) # デフォルトのゲイン。
# 注意! 露光制御の目標値を調整せずにゲイン上限を低く設定すると、
# 露光制御が有効な場合、大きな振動(オシレーション)が発生するだけになります
# (露光制御が有効な場合)。
csi0.snapshot(time=2000) # 設定が反映されるまで待ちます。
clock = time.clock() # FPSを計測するためのclockオブジェクトを作成します。
while True:
clock.tick() # FPSクロックを更新します。
img = csi0.snapshot() # 画像を撮影して返します。
print(
"FPS %f, Gain %f dB, Exposure %d us"
% (clock.fps(), csi0.gain_db(), csi0.exposure_us())
)