расчет фокуса изображения - PullRequest
17 голосов
/ 25 января 2010

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

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

сделать изображение. примените фильтр обнаружения края sobel, который генерирует контур края в оттенках серого. сгенерируйте гистограмму и сохраните стандартное устройство. переместите камеру на один шаг ближе к объекту и сделайте другой снимок. если стандартное устройство меньше предыдущего, мы получаем больше внимания. в противном случае мы прошли оптимальное расстояние для фотографирования.

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

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

обновление 2: хорошо, поэтому я вернулся к этому, и текущему методу, который мы исследуем, дается несколько известных ребер (хорошо, поэтому я точно знаю, какие объекты на картинке), я делаю интенсивность пикселей вручную сравнение. по мере того как результирующий график становится круче, я все больше фокусируюсь. Я опубликую код, как только основной алгоритм будет перенесен из matlab в c # (да, matlab ..: S)

обновление 3: окончательное обновление. вернулся к этому снова. окончательный код выглядит так:

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

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

шаг 3: получить HorizontalIntensityStatistics (класс Aforge.net) для этого обрезанного изображения.

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

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

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

Ответы [ 7 ]

7 голосов
/ 05 октября 2015

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

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

EDGETT, Kenneth S., et al.Расследование Crisosity's Mars Hand Lens Imager (MAHLI). Обзоры космической науки , 2012, 170.1-4: 259-317.

, доступный в виде PDF здесь .

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

7.2.2 Автофокусировка

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

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

Ниже показано изображение 23:

Autofocus in NASA Curiosity Mars Rover

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

5 голосов
/ 01 февраля 2010

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

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

3 голосов
/ 31 января 2010

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

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

3 голосов
/ 27 января 2010

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

Измерение контрастности

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

1 голос
/ 01 февраля 2010

Несмотря на то, что sobel - достойный выбор, я, вероятно, предпочел бы рассчитать величину края для проекций в направлениях x и y для нескольких небольших репрезентативных областей. Еще один дружественный для .NET выбор на основе OpenCV - @ http://www.emgu.com/wiki/index.php/Main_Page.

0 голосов
/ 01 сентября 2011

Другой вариант метрики фокуса может быть:

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

0 голосов
/ 27 января 2010

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

...