LINUX.ORG.RU

Как реализовать автофокус?

 , , ,


0

4

У меня есть:

  • матрица с известным контроллером, с которой я могу получать цифровое изображение в /dev/video0
  • подвижная линза перед этой матрицей
  • шаговый двигатель, подключённый к gpio, который может эту линзу двигать

Вопрос: как лучше всего реализовать автофокус?
Как детектировать то, что объект перед камерой не в фокусе? Как узнать, находится ли он слишком близко или слишком далеко, чтобы понять, в какую сторону двигать линзу? Нужно ли для этого получать с камеры «сырые» данные или сойдёт картинка в MJPEG/H.264? Какова в таком случае будет задержка автоматической фокусировки? Обязательно ли использовать шаговый двигатель? Может, есть варианты проще и компактнее?
Уверен, что про это уже много всего написано. Буду благодарен, если кинете в меня ссылкой.

★★★★★

двигай линзу камеры пока изображение не будет резкое. резкость изображения можно определить в ардуине.

anonymous
()

У меня в гитхабе валяются эксперименты с вейвлетами. Мощность детализирующих коэффициентов тем выше, чем лучше фокус. Есть и другие методы фокусировки. Единственная проблема — невозможно сходу, не проводя предварительное движение фокусером в какую-нибудь сторону, определить требуемое направление движения. Для этого нужно использовать специальную дифракционную маску и работать по звездам.

// Eddy_Em

anonymous
()
Ответ на: комментарий от imatveev13

Действительно, сейчас поискал и большинство камер оказались с подобным автофокусом (всего два контакта, значит можно предположить, что там обычный DC-мотор). Но в таком случае получается, что линза на такой камере крутится? А если на ней градиентный фильтр? Получается, он тоже будет крутиться? Не очень хорошо. Я хотел двигать линзу ровно, без вращения вот таким шаговым двигателем. Думаю, можно его на DC заменить, но я не думаю, что он будет способен обеспечить необходимую точность.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Линза не крутится, мотор линейный. Его зовут voice coil. Например

http://www.global.tdk.com/ceatec_2013/pdf/CEATEC2013_18_en.pdf

Точность ему не нужна. Алгоритм не вычисляет расстояние на кот. двигать линзу, а двигает пока изображение не станет четким.

imatveev13
()
Ответ на: комментарий от imatveev13

Спасибо за информацию. Может, не буду городить свой велосипед, а попытаюсь найти готовый модуль на S-Mount (M12), который будет двигать мою линзу.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Ты таки попробуй с вейвлетами — очень хорошие результаты получались. И считается быстро: делаешь декомпозицию на 1 уровень, вычисляешь мощность LL коэффициентов. Простейший случай — посчитал, сдвинул, еще раз посчитал. Если мощность увеличилась, двигаешь дальше, каждый раз на Nмкм, считая мощности. Как только мощность стала падать, аппроксимируешь хотя бы параболой — получаешь точку наилучшего фокуса. Туда и двигаешь линзу.

anonymous
()
Ответ на: комментарий от anonymous

Вот мои заготовки по вейвлетам. Читай код, я сам уже ничего не помню, а readme не удосужился туда запилить.

Еще в помощь есть задел по обработке изображений: разные операции как в пространственной, так и в частотной области. Плюс морфологические, но я еще до конца их не прилепил (шагающие квадраты добавил, а вот эрозию/дилатацию еще нет, но код этих операций лежит — кстати, быстрей, чем у лептоники получается, с opencv я не сравнивал пока).

anonymous
()
Ответ на: комментарий от anonymous

P.S. Если что, связь со мной через мыло. Скажем, такое: eddyem <at> yandex <dot> ru.

Но я сегодня уматываю на неопределенный срок (ориентировочно - дней 10) в Лыткарино. Думаю, симку для интернета на месте прикуплю, но какое-то время буду скорее всего только на телефоне.

anonymous
()

Фурье тебе в помошь. Максимум высоких частот - картинка в фокусе.

Stanson ★★★★★
()
Ответ на: комментарий от anonymous

вейвлетами

круто. насколько вариант с фурье хуже? кмк, там полосу можно очень сильно ограничить, так что фурье будет очень быстро считаться.

anonymous
()

Писал диплом по автофокусу. Не то что бы работало хорошо, но на тестоых фото находило +/- правильно. Могу надергать литературы, которую смотрел, если надо.

Confucij
()
Ответ на: комментарий от anonymous

Надо сравнивать на современном оборудовании. Тогда вейвлеты были быстрей.

Можно вместо Фурье дискретные косинусы попробовать, всяко шустрей будет.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.