Одна из важных задач стереозрения - процесс преобразования двух плоских изображений в трехмерную сцену с восстановлением информации о глубине каждой точки плоского изображения (расстоянии от стереокамеры до соответствующей точки реальной сцены).
Зная информацию о глубине (функция двух переменных) можно генерировать 3D модели ландшафта и других природных объектов для использования в различных приложениях, таких как виртуальная реальность, симуляция полета, робототехника. В частности, знание об удаленности точек изображения от реального прообраза позволяет делать захват опорных точек движущегося объекта для получения трехмерных координат, что важно в индустрии спецэффектов, кино и телевидении. Захват координат опорных точек позволяет строить уникальные бесконтактные человеко-машинные интерфейсы, управление в которых осуществляется движениями пальцев рук или вообще жестов в пространстве на некотором удалении от стереокамеры.
На данный момент известны активные и пассивные методы восстановления информации о глубине реальной сцены. Активные методы используют ультразвуковые преобразователи или лазерное освещение рабочего пространства, дающие на выходе быструю и точную информацию о глубине [2, 6]. Однако у этих методов есть ограничения по отношению к диапазону измерений и стоимости аппаратных компонентов.
Пассивные методы, основанные на компьютерном зрении, обычно реализуются более простыми и недорогими сенсорами, определяющими расстояние. Такие методы способны генерировать информацию о глубине по полученной паре изображений и параметрам двух камер [1, 7]. Одна из фундаментальных проблем стереозрения заключается в установлении точного соответствия между левым и правым изображением стереопары. Под соответствием понимается расстояние (диспаритет) между пикселями одного и того же объекта на левом и правом изображении. Существующие локальные методы по вычислению карты диспаритета основаны на принципе «скользящего окна» [8]. Они характеризуются определенной сбалансированностью скорости-качества, хорошо масштабируются и реализуются на таких параллельных архитектурах, как видеокарты.
Рис. 1. Общий порядок действий для вычисления карты глубины
Цель данной работы заключается в разработке метода и программного модуля вычисления карты глубины приемлемого качества за кратчайшие временные интервалы в районе от 10 до 40 миллисекунд на недорогом оборудовании. Такие требования продиктованы тем, что данный модуль предназначен для взаимодействия с другими программными модулями, в задачи которых входят трекинг объектов, идентификация лиц и жестов. Все модули должны работать в реальном времени на одном ПК в едином программном комплексе машинного зрения для захвата движения человека и бесконтактного управления мультимедиа.
Общий порядок вычислений представлен на рис. 1. Он состоит из предобработки входных данных, вычисления диспаритета пикселя и конечной постобработки выходных данных медианным фильтром.
Первый шаг вычислений - получение градиентных изображений стереопары методом свертки (рис. 2) [5]
Здесь Ci - обработанный пиксель левого изображения; Ii(i, j) - исходный пиксель на левом изображении; N(x, y) - окрестность 3×3 пикселей; M(i, j) - элемент известной матрицы свертки
Рис. 2. Выделение контуров на изображении
Далее вычисляется линейная комбинация градиентного и исходного изображений с варьируемым параметром k (рис. 3).
Использование такой предобработки значительно уменьшает вероятность ошибки вычисления глубины пикселя, особенно при наличии на стереопаре однородных, малоконтрастных областей (рис. 4).
Диспаритет пикселя d по определению равен расстоянию между соответственными пикселями левого и правого изображений (установление соответствия выполняется построчно перебором пикселей на выбранной строке изображений y)
Здесь xl - положение выбранного пикселя фиксированной строки y на левом изображении, xr - положение соответственного пикселя этой строки на правом изображении.
Чтобы найти xr, для каждого элемента (x, y) строки y правого изображения вычисляется сумма стоимостей пикселей C с окрестностями, как показано в [8].
где W(x, y) - одно- или двумерная окрестность (окно) пикселей с центром в точке (x, y).
Под стоимостью понимается модуль разности левого (выбранного) и правого (подбираемого) пикселей:
Здесь p - пиксель на левом изображении; q - пиксель на правом изображении; d - перебираемый диспаритет.
Далее из всех полученных методом перебора значений суммы стоимостей выбирается минимальное значение, соответствующее положению пикселя с координатами (xl - d, y) на правом изображении. Такой принцип в различных вариациях используется во многих работах, в частности в работе с реализацией адаптивного окна [8]. Так, наиболее похожие пиксели и их окрестности на левом и правом изображении вдоль горизонтальной линии будут формировать минимальную стоимость.
В локальных методах, при увеличении размеров скользящего окна, с одной стороны, уменьшается вероятность ошибки определения диспаритета пикселя, а с другой стороны, значительно возрастает объем вычислений, что делает данный метод малопригодным для расчетов на стереопарах высокого разрешения в реальном времени. Кроме того, появляется эффект «раздувания» переднего плана (рис. 4).
Рис. 3. k = 0,5; P - обработанный пиксель, I - пиксель исходного изображения: C - пиксель градиентного изображения
Рис. 4. Преимущества предобработки входных данных - вычисление карты глубины c использованием предобработки (слева)
Если использовать окна с адаптивной структурой, можно получить достаточно хорошее качество карты глубины, но при этом вновь требуются значительные объемы вычислений.
В предлагаемом методе для достижения оптимального баланса между скоростью и качеством используется два одномерных разреженных окна - вертикальное и горизонтальное. Каждое окно строится из центра рассматриваемого пикселя. Под разряжением понимается, что окно состоит не из ближайших друг к другу пикселей, а из пикселей, находящихся на некотором заданном расстоянии друг от друга, например, два, четыре, шесть пикселей. Это позволяет существенно увеличить скорость вычислений при незначительном увеличении ошибки (рис. 5).
Для расчета стоимости двух одном
Рис. 5. Результаты вычислений для различных вариантов метода построения карты глубины: а - окно 3×3 - время вычисления 7,6 мc; b - окно 10×10 - 125 мс; c - окно 21×21 - 700 мс; d - два одномерных разреженных окна 20×1, с шагом разрежения 4 пикселя - 11,7 мс
ерных окон используются следующие формулы:
Здесь Wh и Wv - горизонтальные и вертикальные окрестности пикселя с центром в точке (x, y); Ch - стоимость горизонтального окна; Cv - стоимость вертикального окна; Cd - итоговая стоимость в точке (x - d, y).
Подчеркнем, что операция суммирования в этих формулах выполняется по индексам суммирования, меняющимся с шагом, не равным единице (эффект прореженности окна (окрестности).
В настоящий момент в области ГПУ вычислений наиболее активно развиваются технологии CUDA и OpenCL, обеспечивающие высокую гибкость и удобство в работе при взаимодействии между ЦПУ и ГПУ. Так, примеры успешной реализации параллельных алгоритмов на перечисленных выше технологиях показаны в [3]. Однако в данной работе был выбран язык шейдеров [4] GLSL, реализующий обработку графических данных, таких как текстуры, полигоны, фрагментными и вершинными программами. Выбор в пользу GLSL обусловлен тем, что входными и выходными данными разработанного алгоритма являются изображения. Отдельно стоит отметить, что GLSL работает корректно почти на всех платформах и ГПУ, в то время как CUDA будет работать только на картах Nvidia, а текущая реализация OpenCL имеет различия в реализациях AMD и NVIDIA как синтаксически, так и с точки зрения скорости выполнения ряда функций. Отметим, что тестирование алгоритма проводилось на тестовых изображениях базы Middlebury (http://vision.middlebury.edu/ stereo/data/).
В процессе разработки данного метода обозначились пути возможного улучшения качества и оптимизации скорости вычислений. Так, для практически полного удаления шумов и повышения четкости границ объектов на карте глубины можно использовать сегментацию входного изображения. Это позволит находить карту глубины не для каждого конкретного пикселя изображения, а для набора сегментов-плоскостей изображения. Другой подход - обработка предложенным алгоритмом только интересующих регионов изображения либо вычисление значения глубины только для движущихся объектов в кадре стереокамеры.
Рецензенты:
-
Гребенников В.И., д.ф.-м.н., профессор, главный научный сотрудник Института физики металлов УрО РАН, г. Екатеринбург;
-
Готлиб Б.М., д.т.н., профессор, заведующий кафедрой «Мехатроника» ФГБОУ ВПО «Уральский государственный университет путей сообщения», г. Екатеринбург.
Работа поступила в редакцию 24.02.2012.
Библиографическая ссылка
Котюжанский Л.А. ВЫЧИСЛЕНИЕ КАРТЫ ГЛУБИНЫ СТЕРЕОИЗОБРАЖЕНИЯ НА ГРАФИЧЕСКОМ ПРОЦЕССОРЕ В РЕАЛЬНОМ ВРЕМЕНИ // Фундаментальные исследования. – 2012. – № 6-2. – С. 444-449;URL: https://fundamental-research.ru/ru/article/view?id=30010 (дата обращения: 14.12.2024).