2010-01-25 2 views
15

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

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

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

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

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

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

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

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

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

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

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

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

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

+0

Я думаю, что вы, по крайней мере, на правильном пути. Если я правильно помню автофокус в цифровых камерах, сделайте что-то подобное. –

+0

Я понял, что прошлой ночью, когда я на самом деле играл с камерой, которая делает AF. тот, на работе, по сути, является тупым отверстием. Когда AF задействован, вы обычно слышите жужжание. это камера, снимающая сэмплы на разных расстояниях и угадывающие лучшее расстояние. –

ответ

5

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

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

+0

Ваш последний пункт - это тот, с которым я столкнулся в пятницу, когда моя камера начала слишком далеко от IC. Я обошел его, когда мне пришло в голову, что я всегда буду на одном уровне, чтобы лучше всего сосредоточиться, поэтому мне нужно перейти от слегка выведенного из фокуса изображения к резкому. эта вещь довольно удивительная, кстати. особенно потому, что съемка микроорганизмов очень близка к съемке микросхем, что я и делаю. –

+0

@Stew BRENNER, John F., et al. Предварительная оценка автоматизированного микроскопа для цитологических исследований. * Журнал гистохимии и цитохимии *, 1976, 24.1: 100-111. http://jhc.sagepub.com/content/24/1/100.full.pdf –

0

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

+0

по той же логике я решил пойти со стандартным отклонением. чем резче изображение, тем выше контраст, тем меньше вариаций на гистограмме. , если я возьму некоторые из самых высоких значений пикселей (т.получить самые яркие пятна), это просто даст мне сколько ярких пятен на этой картинке по сравнению со всеми остальными пятнами на этой картинке. т.е. сдвиги графика сдвигаются: сфокусированный снимок: средний = 23, stddev = 15 немного не в фокусе: среднее: 27, std dev = 16 действительно не в фокусе: среднее: 40, std dev = 20 –

3

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

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

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

+0

Разница в интенсивности между пиксели довольно близки к тому, что даст команда sobel. – kenny

3

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

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

+0

Удивительное представление о прототипе! Ницца. –

1

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

+0

Я не знал, что opencv есть .net. Я предполагаю, что я ошибочно предположил, что это C++, и просто двинулся дальше, не исследуя больше (в моей защите исследование было начато кем-то еще) –

+0

Это C/C++, но ссылка обеспечиваетff - оболочка C# вокруг DLL. – kenny

0

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

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

7

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

Методика описана в этой статье

EDGETT, Kenneth S., et al. Curiosity’s Mars Hand Lens Imager (MAHLI) Investigation. Space science reviews, 2012, 170.1-4: 259-317.

, который доступен в качестве PDF here.

Цитирование из статьи:

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

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

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

Ниже Рисунок 23:

Autofocus in NASA Curiosity Mars Rover

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

+0

thx, очень интересно! – SubniC