sensor_auto_gain_control.py

# Эта работа лицензирована по лицензии MIT.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Автоматическое управление усилением датчика
#
# В этом примере показано, как управлять усилением датчика
# с помощью алгоритма автоматического управления усилением.

# В чём разница между управлением усилением и экспозицией?
#
# Что ж, увеличивая время экспозиции изображения, вы получаете больше
# света на камере. Это даёт наилучшее отношение сигнал/шум. В целом
# вы всегда хотите увеличивать время экспозиции... за исключением случаев, когда
# увеличение времени экспозиции снижает максимально возможную частоту кадров,
# и если что-то в изображении движется, оно начнёт размываться сильнее при
# более высоком времени экспозиции. Управление усилением позволяет увеличить выходной сигнал на
# пиксель с помощью аналоговых и цифровых множителей... однако это также усиливает
# шум. Поэтому лучше позволить экспозиции увеличиваться как можно больше,
# а затем использовать управление усилением, чтобы компенсировать оставшуюся разницу.

# Этого можно добиться, установив потолок усиления для алгоритма автоматического
# управления усилением. После установки этого значения алгоритму придётся
# увеличивать время экспозиции для достижения требуемого усиления вместо использования усиления
# для этой цели. Однако это приводит к тому, что время экспозиции будет сильнее
# изменяться при изменении освещённости, вместо того чтобы экспозиция оставалась постоянной, а
# усиление изменялось.

import csi
import time

csi0 = csi.CSI()
csi0.reset()  # Сброс и инициализация датчика.
csi0.pixformat(csi.RGB565)  # Установить формат пикселей RGB565 (или GRAYSCALE)
csi0.framesize(csi.QVGA)  # Установить размер кадра QVGA (320x240)

# Потолок усиления в дБ для датчика OV7725 достигает максимум около 24 дБ.
csi0.auto_gain(True, gain_db_ceiling=16.0)  # Усиление по умолчанию.

# Внимание! Если вы установите слишком низкий потолок усиления, не скорректировав целевое значение
# управления экспозицией, вы просто получите сильные колебания от
# управления экспозицией, если оно включено.

csi0.snapshot(time=2000)  # Подождать, пока настройки вступят в силу.
clock = time.clock()  # Создать объект clock для отслеживания FPS.

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 ""