УДК 004.932
Параллельная реализация генерации карты глубины изображения для повышения эффективности Depth Image Based Rendering
С. В. Коваль, Донецкий национальный технический университет, кафедра программной инженерии, hdmaxset@gmail.com
С. А. Зори, д.т.н., доцент, Донецкий национальный технический университет, кафедра программной инженерии, sa.zori1968@gmail.com
Аннотация
В работе рассмотрена возможность параллельной реализации и оптимизации алгоритма генерации карты глубины изображения для повышения эффективности систем Depth Image Based Rendering (DIBR). Анализируются особенности построения карт глубины на основе стереопары, программные средства компьютерного зрения и параллельных вычислений, а также предлагается подход к ускорению обработки за счёт разбиения алгоритма на параллельно выполняемые блоки. :contentReference[oaicite:0]{index=0}
Ключевые слова: стереозрение, карта глубины, Depth Image Based Rendering, параллельные вычисления, OpenCV, OpenMP, OpenACC, OpenGL, OpenCL.
Введение
Одной из важных задач стереозрения является преобразование двух плоских изображений в трёхмерную сцену с восстановлением информации о глубине каждой точки плоского изображения — расстояния от стереокамеры до соответствующей точки реального объекта. Зная карту глубины как функцию двух переменных, можно генерировать трёхмерные модели ландшафта и других объектов для задач виртуальной реальности, имитации полёта, робототехники и индустрии спецэффектов.
Информация о глубине позволяет выполнять захват опорных точек движущихся объектов и восстанавливать их трёхмерные координаты, что открывает возможности для построения бесконтактных человеко-машинных интерфейсов, где управление осуществляется жестами или движениями рук в пространстве.
Существуют активные и пассивные методы восстановления глубины. Активные методы (ультразвук, лазерное освещение) обеспечивают высокую точность, но ограничены диапазоном и стоимостью аппаратуры. Пассивные методы, основанные на компьютерном зрении, используют более простые сенсоры и позволяют восстанавливать глубину по стереопаре изображений и параметрам камер.
Общая постановка проблемы
Фундаментальной задачей стереозрения является установление соответствия между левым и правым изображениями стереопары. Под соответствием понимается диспаритет — смещение между пикселями одного и того же объекта на левом и правом изображениях.
Основная проблема при генерации карт глубины для систем DIBR заключается в высокой вычислительной сложности и низкой скорости обработки изображений при поиске соответствий. Это ограничивает практическое применение технологий стереозрения в системах реального времени и мультимедийных приложениях.
Цель работы
Целью работы является исследование возможности ускорения и повышения качества работы системы генерации карты глубины изображения за счёт распараллеливания вычислительных процессов и оптимизации алгоритма.
Задача генерации карт глубины относится к классу трудно формализуемых и особенно актуальна в связи с необходимостью автоматизации распознавания на основе карт глубины и сложностью их эффективной параллельной реализации. Разработанные алгоритмы и программные решения предназначены для использования в составе DIBR-систем с поддержкой параллельных вычислений.
Построение карты глубины
Карта глубины — это изображение, в котором для каждого пикселя вместо цвета хранится расстояние до камеры. Она может быть получена с помощью специализированных камер глубины или восстановлена по стереопаре изображений.
Базовая идея построения карты глубины по стереопаре состоит в следующем: для каждой точки на одном изображении выполняется поиск соответствующей точки на другом. По паре соответствий выполняется триангуляция и определяются координаты прообраза в трёхмерном пространстве. Глубина вычисляется как расстояние от точки до плоскости камеры.
Для упрощения поиска используется ректификация изображений: стереопару выравнивают так, чтобы эпиполярные линии стали горизонтальными, а соответствующая точка искалась в той же строке второго изображения. После ректификации для пикселя с координатами (x₀, y₀) соответствующий пиксель на правом изображении ищется вдоль строки y₀.
На практике для каждого пикселя левого изображения с координатами (x₀, y₀) выполняется поиск пикселя на правом изображении в виде максимума функции отклика (например, корреляции окрестностей). Результатом является карта смещений (диспаритетов). Значения глубины обратно пропорциональны величине смещения: при малых расстояниях разрешающая способность выше, при больших — хуже.
Программные средства
Для реализации и оптимизации системы генерации карты глубины были использованы следующие программные средства: библиотека компьютерного зрения OpenCV и фреймворки параллельного программирования OpenMP, OpenACC, OpenGL и OpenCL.
OpenCV
OpenCV (Open Source Computer Vision Library) — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов. Она реализована на C/C++ и имеет привязки к Python, Java, Matlab и другим языкам. Библиотека содержит готовые функции для обработки изображений, включая алгоритмы поиска соответствия пикселей стереопары и построения карт глубины.
OpenMP
OpenMP — открытый стандарт для распараллеливания программ на C, C++ и Fortran. Он задаёт набор директив компилятора, библиотечных функций и переменных окружения для организации многопоточных приложений на системах с общей памятью. OpenMP реализует параллельные вычисления по модели «главный поток — подчинённые потоки».
Среди недостатков OpenMP отмечаются возможное недетерминированное поведение при работе с общими переменными и сложность распараллеливания крупных структур с зависимостями по данным.
OpenACC
OpenACC — стандарт параллельного программирования для упрощения разработки гетерогенных программ, использующих CPU и GPU. Как и OpenMP, он основан на директивах компилятора, позволяющих помечать участки кода для выполнения на ускорителе. OpenACC скрывает от программиста детали инициализации графического процессора и передачи данных.
OpenGL
OpenGL — спецификация кроссплатформенного интерфейса для двух- и трёхмерной графики. Она содержит более 300 функций для рисования сложных сцен и широко применяется в играх, САПР, системах виртуальной реальности и визуализации. Реализации OpenGL создаются производителями оборудования с учётом возможностей конкретных устройств.
OpenCL
OpenCL (Open Computing Language) — открытый фреймворк для программирования параллельных вычислений на CPU, GPU и FPGA. В его состав входят язык программирования, основанный на C99, и API для взаимодействия с устройствами. OpenCL обеспечивает параллелизм на уровне данных и инструкций и используется для GPGPU-вычислений, дополняя стандарты OpenGL и OpenAL возможностями высокопроизводительной обработки.
Оптимизация системы
Для повышения эффективности системы генерации карты глубины была проведена оптимизация структуры алгоритма. Из-за высокой сложности исходного алгоритма не все средства параллелизации могут корректно работать с ним как с монолитным блоком.
Предложен подход, основанный на разбиении алгоритма на набор независимых блоков. Часть из них распараллеливается с использованием OpenMP, OpenACC, OpenCL или других средств, а часть выполняется последовательно. В результате получается совокупность менее сложных структур, каждая из которых легче поддаётся параллельной реализации.
Такой подход позволяет сократить время обработки изображений и построения карты глубины без существенного изменения логики исходного алгоритма.
Выводы
В работе выполнен анализ программных средств, предназначенных для обработки изображений и распараллеливания вычислительных процессов, исследованы возможные технологии модификации системы генерации карт глубины и предложен метод оптимизации за счёт распараллеливания отдельных частей алгоритма.
Предложенный подход создаёт основу для внедрения параллельной генерации карт глубины в системы Depth Image Based Rendering, что позволит повысить их эффективность и приблизить использование DIBR к требованиям приложений реального времени.
Литература
- Основы стереозрения [Электронный ресурс]. Режим доступа: https://habr.com/.
- OpenCV [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/OpenCV.
- OpenMP [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/OpenMP.
- OpenACC [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/OpenACC.
- OpenGL [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/OpenGL.
- OpenCL [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/OpenCL.
Annotation
Koval S.V., Zori S.A. Parallel implementation of image depth map generation to increase the efficiency of Depth Image Based Rendering. The paper examines the possibility of parallel implementation and optimization of an image depth map generation algorithm for DIBR systems. The authors analyze the basic principles of depth map construction from stereo pairs, survey software tools for computer vision and parallel computing (OpenCV, OpenMP, OpenACC, OpenGL, OpenCL) and propose an approach to splitting the algorithm into independent blocks, which enables effective parallelization and reduction of processing time.
Key words: stereovision, depth map, Depth Image Based Rendering, parallel computing, OpenCV, OpenMP, OpenACC, OpenGL, OpenCL.