Аппаратный блок коррекции геометрических искажений изображения в реальном времени (fisheye)

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

Для систем машинного зрения, автопилотов, роботов, систем видеонаблюдения — это серьёзная проблема, так как алгоритмы распознавания и измерения опираются на точные координаты пикселей. Для их работы нужен аппаратный блок исправления изображений в реальном времени.
Принцип работы: обратное отображение координат
Для каждого пикселя выходного изображения вычисляется, из какой точки входного изображения нужно взять цвет. Так как эта точка почти всегда между пикселями, значение достраивается по четырём ближайшим соседям — это называется билинейной интерполяцией.
Этапы обработки
Обработка одного кадра происходит как непрерывный поток шагов, выполняемых параллельно:
  1. Приём видеопотока — пиксели поступают по одному за такт.
  2. Формирование координат выходного кадра — счётчики определяют, какой пиксель сейчас формируется.
  3. Получение координаты выборки — по специальной таблице определяется, из какой точки входного изображения нужно взять данные.
  4. Разделение координаты на целую и дробную часть — целая часть указывает на нужный пиксель, дробная — на то, насколько сильно учитывать соседние пиксели.
  5. Буферизация строк изображения — так как заранее неизвестно, какая строка пикселей понадобится, в памяти хранится конечный набор последних строк, а не весь кадр.
  6. Формирование окна из 4 соседних пикселей.
  7. Билинейная интерполяция — вычисление значения цвета с учётом весов.
  8. Приведение к требуемому диапазону яркости.
  9. Выдача пикселя в выходной поток.
Благодаря конвейерной организации после начального накопления данных блок выдаёт по одному пикселю за такт, без простаивания.
Сбор статистики
Для проверки корректности работы был построен процесс сравнения аппаратного результата с программной эталонной моделью:
  • Полный кадр содержит на экране Full HD с разрешением 1920x1980 имеет 2 073 600 пикселей.
  • Сравнение выполняется попиксельно, по всем цветовым компонентам.
  • Точное совпадение с эталонным изображением составило около 96%, при этом кадр формируется полностью, без потери пикселей.
  • Отдельно проверялись сложные участки: первые и последние пиксели строк, верхние и нижние строки кадра, углы изображения. Участки, где сложнее всего устранить ошибки.
  • Проведено сравнение аппаратных затрат с автоматически сгенерированным вариантом (на основе среды MATLAB HDL Toolbox):
Разработанное решение существенно экономнее по числу регистров, блочной памяти и особенно по числу умножителей — почти в 8 раз меньше, что критично для встраиваемых систем с ограниченными ресурсами.
Блок стабильно работает на частоте 148,5 МГц, что соответствует требованиям видеопотока Full HD 60 кадров/сек.
Назначение
Блок предназначен для встраивания в видеотракт устройств, где требуется коррекция оптических искажений в реальном времени:
  • камеры технического зрения и промышленные системы контроля;
  • системы видеонаблюдения;
  • автомобильные и робототехнические камеры;
  • беспилотные летательные аппараты;
  • проекционные системы и системы виртуальной реальности;
  • любые встраиваемые устройства, где невыгодно тратить ресурсы процессора на программную коррекцию изображения.