Autoexposure rus: Difference between revisions

From ElphelWiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
{{ru|en=Autoexposure|cn=Autoexposure_cn}}
{{ru|en=Autoexposure|cn=Autoexposure_cn}}
На данный момент реализовал алгоритм автоэкспозиции, при заборе одиночных изображений через web-интерфейс надо получить несколько изображений подряд, пока погрешность не станет приемлемой.


Алгоритм весьма далек от идеального, т.к. дребезжит. Вот собственно цитата вопроса:
Выложил в CVS в camera333mjpeg автоэкспозицию - она запускается сразу же после старта камеры, и настраивается сразу же после первого кадра, полученного через web-интерфейс - т.е. самый первый кадр будет с настройками из web-интерфейса. Теперь поподробнее:


----
'''1.''' Автоэкспозиция рассчитывается в приложении apps/autoexp (в камере /usr/local/bin/autoexp), управляется (приведу описание без html, через командную строку) с помощью приложения autoexp_ctrl с такими параметрами:


"Вы не знаете, где можно найти описание алгортимов, используемых для
''-s'' отобразить текущие настройки автоэкспозиции.
автоэкспозиции?
Тот, который я сейчас реализовал, страдает "дребезжанием":


1. Если сцена недоэкспонирована, т.е. число пикселей с значением == 0
''-e'' включить автоэкспозицию.
(или четверти допустимой переэкспонированной площади), то ищем сверху индекс
V, в котором число пикселей не равно нулю, и коэффициент умножения
будет K = V/254.0;


2. Если сцена переэкспонирована, то K=SUM[число пикселей с значениями от
''-d'' отключить автоэкспозицию
250(или 254) до 255]/[допустимая площадь переэкспонирования], if(K < 0.5)
K = 0.5;


3. Если число площади меньше области пересветки, и больше 0 (или
''-w, -h'' - ширина и высота окна рассчета автоэкспозиции (гистограммы), в процентах от изображения, получаемого с сенсора (т.е. изображения после сжатия)
четверти области пересветки), то K=1.0


В части 2 алгоритма все ок - если сцена переэкспонирована, то мы не знаем,
''-l, -t'' - смещение окна рассчета автоэкспозиции (гистограммы), в процентах. 0% - крайние левое и верхнее положение, 100% - крайние нижнее и правое положение, 50% - строго по центру.
на сколько можно опустить время экспозиции, главное - опустить, пока
 
не получится условие 1 или 3.
''-e'' - максимальное время экспозиции сенсора, которое может установить autoexp, в 0.1ms. (необходимо, чтобы в видеопотоке не падал fps)
Но после этого в условии 1 используется неоптимальный алгоритм - в
 
результате, если большая часть сцены равномерно освещена, то
''-o'' - в процентах, максимально допустимое переэкспонированное число пикселей (не от всего изображения, а только от окна гистограммы), с точностью до 0.01%
получается, что при оптимальной экспозиции область пересветки будет
 
больше небольшой площади пересветки, и в цикле идут шаги 1/2. Вы не в
'''1.1.''' Сразу же после запуска используются такие установки: - 100% ширина и высота окна гистограммы, максимальное значение экспозиции - 400ms, допустимое число пересвеченных пикселей - 0.5%.
курсе, как с таким можно бороться?"
 
'''1.2.''' autoexp после запуска не убивается.
 
'''2.''' Алгоритм автоэкспозиции на данный момент изменяет только время экспонирования сенсора, никак не влияя на настройки gain. При этом после первого получения изображения через web-интерфейс, работает постоянно (если включен), не зависимо от работы компрессора (сжатия FPGA). При этом все установки времени экспозиции "перетираются" временем, рассчитанным в apps/autoexp. Латентность каждого пересчета - 4 кадра (1-й - получение гистограммы и передача в autoexp, второй - изменение времени автоэкспозиции в сенсоре без его остановки, поэтому третий - пропуск кадра с искаженной гистограммой, и четвертый - вычисление корректной гистограммы после применения последнего изменения). ''В дальнейшем будет проведена оптимизация латентности.''
 
'''2.1.''' Работа с gain будет добавлена в следующей итерации реализации автоэкспозиции, с сохранением баланса белого.
 
'''3.''' Было уменьшено время программирования регистров сенсора (практически в 10 раз - до ~80микросекунд) - стабильность программирования сенсора сохраняется при его частоте от ~15MHz - в fpcf добавлено ограничение на минимальную частоту сенсора в 20MHz.
 
'''4.''' Сам расчет экспозиции осуществляется в autoexp.c/hist_analyze() - в ближайшее время будет добавлена опция для autoexp_ctrl блокирования continuous режима работы автоэкспозиции.
 
'''4.1.''' В алгоритме была проведена оптимизация механизмов повышения и понижения экспозиции, чтобы не наблюдался резонанс, в связи с этим понижение экспозиции работает несколько медленнее, чем её повышение.
 
'''4.2.''' Алгоритм настроен так, что переэкспонированная сцена - при '''S > SQ''', недоэкспонированная - '''SQ < SQ/4''', и алгоритм стремится установить '''SQ >= S >= SQ/4''', - это сделано для избежания эффекта "иголки" - когда один небольшой яркий объект повергает всю сцену в мрак, где: '''SQ''' - максимально допустимое число переэкспонированных пикселей; '''S''' - число пикселей с значением 255 (сумма по всем цветам, чтобы не было искажений по балансу белого - т.е. считаем, что баланс белого выставлен корректно)
 
'''5.''' Из камеры доступен web-интерфейс управления автоэкспозицией (описание ожидается).
 
'''P.S.''' Вроде пока все.

Revision as of 10:28, 29 November 2005

in English | autotranslate | по-русски | 中文版

Выложил в CVS в camera333mjpeg автоэкспозицию - она запускается сразу же после старта камеры, и настраивается сразу же после первого кадра, полученного через web-интерфейс - т.е. самый первый кадр будет с настройками из web-интерфейса. Теперь поподробнее:

1. Автоэкспозиция рассчитывается в приложении apps/autoexp (в камере /usr/local/bin/autoexp), управляется (приведу описание без html, через командную строку) с помощью приложения autoexp_ctrl с такими параметрами:

-s отобразить текущие настройки автоэкспозиции.

-e включить автоэкспозицию.

-d отключить автоэкспозицию

-w, -h - ширина и высота окна рассчета автоэкспозиции (гистограммы), в процентах от изображения, получаемого с сенсора (т.е. изображения после сжатия)

-l, -t - смещение окна рассчета автоэкспозиции (гистограммы), в процентах. 0% - крайние левое и верхнее положение, 100% - крайние нижнее и правое положение, 50% - строго по центру.

-e - максимальное время экспозиции сенсора, которое может установить autoexp, в 0.1ms. (необходимо, чтобы в видеопотоке не падал fps)

-o - в процентах, максимально допустимое переэкспонированное число пикселей (не от всего изображения, а только от окна гистограммы), с точностью до 0.01%

1.1. Сразу же после запуска используются такие установки: - 100% ширина и высота окна гистограммы, максимальное значение экспозиции - 400ms, допустимое число пересвеченных пикселей - 0.5%.

1.2. autoexp после запуска не убивается.

2. Алгоритм автоэкспозиции на данный момент изменяет только время экспонирования сенсора, никак не влияя на настройки gain. При этом после первого получения изображения через web-интерфейс, работает постоянно (если включен), не зависимо от работы компрессора (сжатия FPGA). При этом все установки времени экспозиции "перетираются" временем, рассчитанным в apps/autoexp. Латентность каждого пересчета - 4 кадра (1-й - получение гистограммы и передача в autoexp, второй - изменение времени автоэкспозиции в сенсоре без его остановки, поэтому третий - пропуск кадра с искаженной гистограммой, и четвертый - вычисление корректной гистограммы после применения последнего изменения). В дальнейшем будет проведена оптимизация латентности.

2.1. Работа с gain будет добавлена в следующей итерации реализации автоэкспозиции, с сохранением баланса белого.

3. Было уменьшено время программирования регистров сенсора (практически в 10 раз - до ~80микросекунд) - стабильность программирования сенсора сохраняется при его частоте от ~15MHz - в fpcf добавлено ограничение на минимальную частоту сенсора в 20MHz.

4. Сам расчет экспозиции осуществляется в autoexp.c/hist_analyze() - в ближайшее время будет добавлена опция для autoexp_ctrl блокирования continuous режима работы автоэкспозиции.

4.1. В алгоритме была проведена оптимизация механизмов повышения и понижения экспозиции, чтобы не наблюдался резонанс, в связи с этим понижение экспозиции работает несколько медленнее, чем её повышение.

4.2. Алгоритм настроен так, что переэкспонированная сцена - при S > SQ, недоэкспонированная - SQ < SQ/4, и алгоритм стремится установить SQ >= S >= SQ/4, - это сделано для избежания эффекта "иголки" - когда один небольшой яркий объект повергает всю сцену в мрак, где: SQ - максимально допустимое число переэкспонированных пикселей; S - число пикселей с значением 255 (сумма по всем цветам, чтобы не было искажений по балансу белого - т.е. считаем, что баланс белого выставлен корректно)

5. Из камеры доступен web-интерфейс управления автоэкспозицией (описание ожидается).

P.S. Вроде пока все.