Jump to content
Калькуляторы

Поймать фокус на кадре оффтопик

К сожалению, не знаю, к кому обратиться. Прошу помощь зала =)

Есть кадр в любом мыслимом формате. Вообще-то он в RAW/color. ПРЕДПОЛАГАЕТСЯ, что он снят в фокусе, но источник этой информации часто врёт и мы ему не верим. Есть ли быстрый, желательно реализуемый аппаратно, способ выяснить, был ли ДАННЫЙ КОНКРЕТНЫЙ КАДР снят в фокусе? Мы можем рассчитывать, что где-то в кадре есть какое-то количество контрастных границ.

 

Проблема осложняется тем, что задачку надо решать примерно 120 раз в секунду при размере кадра VGA (640*480). В идеале устройство должно на входе получать эти кадры, анализировать, и отбрасывать те, которые "недостаточно в фокусе", а те, которые "в фокусе", выдавать на выход в первоначальном виде. То есть этакий фильтр для отбраковки того, что не получилось.

 

Вопрос чисто теоретический. То есть допустимо использовать не только FPGA, но и, если необходимо, любые программно-аппаратные решения вплоть до заказных DSP. Ценой пока можно пренебречь, - вопрос именно теоретический: это вообще возможно или вообще нереализуемо?

 

Предположение: если в пределах 2-3 пикселей на протяжении одной произвольной линии по кадру один монотонный (5+ пикселей) цвет поменялся на другой монотонный (5+ пикселей) цвет, - и так более трёх раз по разным линиям по кадру, - то картинка в фокусе.

Share this post


Link to post
Share on other sites

Ищи литературу по автофокусу у производителей фотоаппаратов и видеокамер. Они решают эту задачу как в статике, так и в динамике, причем на очень больших скоростях съемки движущихся объектов при слежении за объектами и автонаводке. Методов два - контрастный и фазовый. Осуществляется по записанной программе, так как прошивки меняются регулярно. Посему - ничего невозможного нет. Какая разница в источнике изображения - матрица или готовая картинка...

Share this post


Link to post
Share on other sites

Стандартная обработка по "контрастному" методу, как Алекс выше написал может помочь, но есть один нюанс: все алгоритмы автофокуса - это алгоритмы оптимизации, т.е. "максимальная четкость в зоне датчика", с их помощью можно из 100 кадров выделить "самый резкий", но нельзя сделать вывод о том, был ли фокус при съемке оптимален для данной конкретной сцены.

 

Вообще-то не может быть универсального алгоритма для неограниченного набора сцен. "Ежик в тумане" всегда будет нерезким ;) Хотя это хороший, годный кадр. Поэтому либо выборка лучших по этому критерию из ряда либо заданный принудительно пороги контрастности, которые не всегда будут работать так, как надо.

 

Чего ты там такое изобретаешь?

Share this post


Link to post
Share on other sites

Попытка решить задачку в лоб показала, что фото-видео-камеры при автофокусе возят объективом, то есть они решают совсем другую задачу: настроить объектив. В нашем случае возить нечем, - объектив нам неподвластен, более того, он жёстко зафиксирован по фокусному расстоянию. Поток кадров представляет из себя снятую по разным внешним критериям одну и ту же сцену, в которой может появиться табличка с текстом или символами. Появиться она может в любой части кадра и иметь любые цвета, - но мы можем рассчитывать, что она достаточного размера, чтобы, если её удалось сфотографировать, - то потом умный алгоритм распознавания её как-то распознал. Но кроме таблички там могут появляться всякие другие бесполезные объекты, поэтому нужны только кадры, на которых есть что-то похожее на табличку. "Эталонного образца" таблички, к сожалению, нет, - таблички могут быть разными.

 

В чём проблема: алгоритму распознавания лучше получить RAW картинку, но поток этих кадров, блин, жирный. В похожей задачке у коллег одна камера выдаёт поток в полтора гигабита/сек, из которых около 95-98% кадров просто не нужны, но которые именно не нужны? И куда этот поток вливать? Пока его жмут видеосжатием, в итоге потом распознавалка тратит силы на разбор артефактов сжатия. В итоге либо ставить распознавалку (а она дорогая и нежная) около камеры (так делают на стационарных сортировочных центрах), либо около камеры этот поток сортировать, выбрасывая ненужный мусор до начала передачи в ЦОД. К тому же банально жаба душит в распознавалку вливать столько постороннего шума. Вот если бы получилось скармливать ей только те кадры, на которых хотя бы предположительно есть что-то полезное... А в идеале - вообще ненужное от камеры не получать, сеть не загружать, - тогда распознавалки можно собрать в ЦОДе в идеальных для них условиях, - если поток полезных кадров будет иметь разумные размеры, а не сотни терабит/сек ;-(

Share this post


Link to post
Share on other sites

А есть возможность освещать объект съемки попеременно прожекторами с цветными стеклами? Потом получать серию одноцветных изображений, так их будет проще сравнивать между собой для задачи определения резкости.

Share this post


Link to post
Share on other sites

Есть ли быстрый, желательно реализуемый аппаратно, способ выяснить, был ли ДАННЫЙ КОНКРЕТНЫЙ КАДР снят в фокусе?

если в кадре один объект - то да. Если несколько, то алгоритму необходим hint в какой области кадра искать объект.

т.е. если сделать структуру типа матрица -> L1-обработка(FPGA) -> L2-обработка(проц) -> hinting feedback to L1 то вполне можно получить то что надо.

 

городите конкурента Стрелке-СТ? тогда 120 кадров в секунду - это мало ;-)

Share this post


Link to post
Share on other sites

Зачем? Ты и так из цветного изображения можешь выделить составляющие любой цветности.

Ответ: нет. В створе (фокусе) камеры объекты могут появляться и двигаться, последовательные снимки дадут разные картинки.

Share this post


Link to post
Share on other sites

"Эталонного образца" таблички, к сожалению, нет, - таблички могут быть разными.

Насколько разными? если есть заметные ограничения по размеру текста, шрифту, ракурсу - это одна задача, если вообще что угодно - совсем другая.

 

В чём проблема: алгоритму распознавания лучше получить RAW картинку, но поток этих кадров, блин, жирный. В похожей задачке у коллег одна камера выдаёт поток в полтора гигабита/сек, из которых около 95-98% кадров просто не нужны, но которые именно не нужны?

Возможно, получится сделать какую-то быструю предварительную оценку, например: количество интересных точек (keypoints) больше некоторого порога, но это уже надо в данные смотреть.

 

В общем случае придется обрабатывать всё.

Edited by Gull

Share this post


Link to post
Share on other sites

Ну хинты нужны полюбому.. Камера смотрящая в окно снимает 2 дерева рядом с окном, десяток деревьев в 100 метрах и дом напротив метрах в 300.. Наведение на что будет называться "оптимальая резкость" особенно при низкой глубине?. Только если гиперфокус, но там другие тараканы.

Share this post


Link to post
Share on other sites

Номера считываешь?

 

Таблички с текстом? Контрастные? Если так, то по критерию максимальной контрастности - максимальная дельта яркости между пикселами. Считается на потоке просто.

Share this post


Link to post
Share on other sites
Попытка решить задачку в лоб показала, что фото-видео-камеры при автофокусе возят объективом, то есть они решают совсем другую задачу: настроить объектив. В нашем случае возить нечем, - объектив нам неподвластен, более того, он жёстко зафиксирован по фокусному расстоянию. Поток кадров представляет из себя снятую по разным внешним критериям одну и ту же сцену, в которой может появиться табличка с текстом или символами. Появиться она может в любой части кадра и иметь любые цвета, - но мы можем рассчитывать, что она достаточного размера, чтобы, если её удалось сфотографировать, - то потом умный алгоритм распознавания её как-то распознал. Но кроме таблички там могут появляться всякие другие бесполезные объекты, поэтому нужны только кадры, на которых есть что-то похожее на табличку. "Эталонного образца" таблички, к сожалению, нет, - таблички могут быть разными.

 

Задачу то на уровне ТЗ сформулировать можно?

Если объектив жестко зафиксирован и обладает глубиной резкости - то все, что попало в расстояние от - до резкое по законам оптики.

Объъект движется в плоскости объектива или навстречу объективу?

Тебе что распознавать то нужно? Буквы и цифры? Или нечто другое?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this