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())
    )

results matching ""

    No results matching ""