Вопрос

Я пытаюсь разработать алгоритм фокусировки изображения для некоторой работы по автоматизации тестов. Я решил использовать aforge.net, так как это кажется хорошей зрелой .NET Friendly System.

К сожалению, я не могу найти информацию о создании алгоритмов автофокусировки с нуля, поэтому я дал ей лучшую попытку:

принять изображение. Примените фильтр обнаружения края Sobel, который генерирует контур края серого. Создайте гистограмму и сохраните стандартный разработчик. Переместите камеру на шаг ближе к предмету и сделайте еще один снимок. Если стандартный разработчик меньше предыдущего, мы в центре внимания. В противном случае мы прошли оптимальное расстояние, чтобы сфотографироваться.

Есть ли способ лучше?

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

ОБНОВЛЕНИЕ 2: Хорошо, поэтому я вернулся к этому, и текущий метод, который мы исследуем, дают несколько известных ребра (хорошо, поэтому я точно знаю, каковы объекты на картинке), я делаю сравнение интенсивности пикселей ручного пикселя. Поскольку полученный график становится все круче, я уделяюсь больше внимания. Я отправлю код, как только основной алгоритм перенесен из Matlab в C# (да, Matlab ..: s)

ОБНОВЛЕНИЕ 3: Окончательное обновление YAY. вернулся к этому снова. Окончательный код выглядит так:

Шаг 1: Получите изображение из списка изображений (я сделал сотню фотографий через сфокусированную точку)

Шаг 2: Найдите преимущество для объекта, который я фокусирую (в моем случае его прямоугольный объект, который всегда находится в одном месте, поэтому я обрезаю высокий и узкий прямоугольник одного края)

Шаг 3: Получите HorizontalIntencyStatistics (класс Aforge.net) для этого обрезанного изображения.

Шаг 4: Получите гистограмму (серый, в моем случае)

Шаг 5: Найдите производную значений гистограммы

Шаг 6: Когда ваш наклон самый большой, это когда вы находитесь в наиболее целенаправленной точке.

Это было полезно?

Решение

Это может быть немного упрощенно для ваших потребностей, но у меня были хорошие результаты с простым алгоритмом, который рассматривает разницу в соседних пикселях. Сумма разницы пикселей 2-way, по-видимому, является разумной мерой контраста изображения. Я не мог найти оригинальную статью Бреннера в 70 -х годах, но она упоминается в http://www2.die.upm.es/im/papers/autofocus.pdf

Другая проблема заключается в том, когда изображение чрезвычайно не в фокусе, информация о фокусе очень мало, поэтому трудно сказать, какой способ «приближается» или избежать локального максимума.

Другие советы

Вы можете взглянуть на технику, используемую в NASA Curiosity Mars Rover.

Техника описана в этой статье

Edgett, Kenneth S., et al. Расследование Mars Hand Lins (Mahli). Обзоры космических наук, 2012, 170.1-4: 259-317.

который доступен как PDF здесь.

Цитата из статьи:

7.2.2 Автофокус

Ожидается, что автофокус будет основным методом, с помощью которого Махли сосредоточен на Марсе. Команда AutoFocus инструктирует камеру перейти в указанное начальное положение счета двигателя и собирать изображение, перемещать указанное количество шагов и собирать другое изображение и продолжать делать это до достижения общего количества изображений, каждый из которых разделен указанным двигателем Считайте приращение. Каждое из этих изображений сжимается JPEG (группа экспертов по совместным фотосессиями; см. CCITT (1993)) с применением того же коэффициента качества сжатия. Размер файла каждого сжатого изображения является мерой детализации сцены, которая, в свою очередь, является функцией фокусировки (изображение в фокусе показывает больше деталей, чем размытый, вне фокусировки той же сцены). Как показано на рис. 23, камера определяет взаимосвязь между размером файла JPEG и количеством двигателей и соответствует параболе для трех соседних максимальных размеров файлов. Вершина параболы обеспечивает оценку наилучшей позиции моторного количества фокуса. Сделав это решимость, Мали перемещает фокус -группу объектива в лучшую моторную позицию и приобретает изображение; Это изображение сохраняется, более ранние изображения, используемые для определения положения автофокуса, не сохраняются.

Автофокус может быть выполнен по всему полю взгляда Mahli, или его можно выполнить на подпрофся, которая соответствует части сцены, которая включает в себя объект (ы). В зависимости от характера предмета и знаний о неопределенности в позиционировании роботизированных рук в Махли, пользователи могут принять решение о приобретении центральной автофокусировки, или они могут выбрать субпрофраги с автофокусом вне центра, если позиционирование достаточна, чтобы определить, где было достаточно Суб-рамка должна быть расположена. Настоятельно рекомендуется использование подборов для выполнения автофокуса, потому что это обычно приводит к тому, что субъект находится в лучшем фокусе, чем тот случай, когда автофокус применяется к полной ПЗС; Кроме того, результирующее положение мотора от автофокусировки с использованием суб-рамы, как правило, приводит к более точному определению рабочего расстояния от пиксельной шкалы.

Ниже приведено рисунок 23:

Autofocus in NASA Curiosity Mars Rover

Эта идея была предложена также в этом ответе: https://stackoverflow.com/a/2173259/15485

Это может быть полезно. Это как на самом деле работает система AF Camera - Пассивный автофокус

Контрастное измерение

Измерение контраста достигается путем измерения контраста в поле датчика через объектив. Разница интенсивности между соседними пикселями датчика естественным образом увеличивается с правильной фокусировкой изображения. Таким образом, оптическая система может быть скорректирована до тех пор, пока не будет обнаружен максимальный контраст. В этом методе AF вообще не включает в себя фактическое измерение расстояния и, как правило, медленнее, чем системы обнаружения фазы, особенно при работе при тумбочном свете. Поскольку он не использует отдельный датчик, однако, автофокус с контрастным определением может быть более гибким (как он реализован в программном обеспечении) и потенциально более точным. Это распространенный метод в видеокамерах и цифровых камерах на уровне потребителей, в которых отсутствуют ставни и рефлекторные зеркала. Некоторые DSLR (включая Olympus E-420, Panasonic L10, Nikon D90, Nikon D5000, Nikon D300 в режиме штатива, Canon EOS 5D Mark II, Canon EOS 50D), используют этот метод при фокусировании в режимах View View. Новая сменная система, микро-четыре трети, исключительно использует автофокус измерения контрастного измерения и, как говорят, предлагает производительность, сопоставимые с системами обнаружения фазы.

Я сам не построил его, но моей первой мыслью было бы сделать 2D DFT на части изображения. Когда вы вышли из внимания, высокие частоты будут исчезнуть автоматически.

Для ленивого прототипа вы можете попытаться сжать область изображения с помощью JPEG (высокое качество) и посмотреть на размер выходного потока. Большой файл означает много деталей, что, в свою очередь, подразумевает, что изображение находится в фокусе. Остерегайтесь, что камера не должна быть слишком шумной, и что вы, конечно, не можете сравнивать размеры файлов в разных сценах.

В то время как Sobel является достойным выбором, я бы, вероятно, решил бы сделать расчет величины края в проекциях в направлениях x и y в нескольких небольших репрезентативных областях. Другой выбор .NET Friendly, основанный на OpenCV, - это @ http://www.emgu.com/wiki/index.php/main_page.

Интересно, является ли стандартное отклонение лучшим выбором: если изображение становится острее, изображение фильтра Sobel будет содержать более яркие пиксели по краям, но в то же время меньше ярких пикселей, потому что края становятся более тонкими. Может быть, вы могли бы попробовать использовать в среднем из 1% самых высоких значений пикселей на изображении Sobel?

Еще один вкус для метрики фокусировки может быть:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top