Я пытаюсь разработать алгоритм фокусировки изображения для некоторых работ по автоматизации тестирования. Я решил использовать AForge.net, так как он выглядит как хорошая зрелая .net дружественная система.
К сожалению, я не могу найти информацию о создании алгоритмов автофокуса с нуля, поэтому я сделал это изо всех сил:
сделать изображение. примените фильтр обнаружения края sobel, который генерирует контур края в оттенках серого. сгенерируйте гистограмму и сохраните стандартное устройство. переместите камеру на один шаг ближе к объекту и сделайте другой снимок. если стандартное устройство меньше предыдущего, мы получаем больше внимания. в противном случае мы прошли оптимальное расстояние для фотографирования.
есть ли лучший способ?
обновление: ОГРОМНЫЙ недостаток в этом, кстати. по мере того, как я получаю за оптимальной точкой фокусировки, мое значение «изображение в фокусе» продолжает расти. вы ожидаете, что параболическая функция будет смотреть на расстояние / фокусное значение, но в действительности вы получите нечто более логарифмическое
обновление 2: хорошо, поэтому я вернулся к этому, и текущему методу, который мы исследуем, дается несколько известных ребер (хорошо, поэтому я точно знаю, какие объекты на картинке), я делаю интенсивность пикселей вручную сравнение. по мере того как результирующий график становится круче, я все больше фокусируюсь. Я опубликую код, как только основной алгоритм будет перенесен из matlab в c # (да, matlab ..: S)
обновление 3: окончательное обновление. вернулся к этому снова. окончательный код выглядит так:
шаг 1: получить изображение из списка изображений (через сфокусированную точку я сделал сто фотографий)
шаг 2: найдите ребро для объекта, на котором я фокусируюсь (в моем случае это прямоугольный объект, который всегда находится в одном и том же месте, поэтому я обрезаю прямоугольник HIGH и NARROW одного ребра)
шаг 3: получить HorizontalIntensityStatistics (класс Aforge.net) для этого обрезанного изображения.
шаг 4: получить гистограмму (в моем случае, серый)
шаг 5: найти производную от значений гистограммы
шаг 6: когда уклон самый большой, это когда вы находитесь в наиболее сфокусированной точке.