С появлением дополненной реальности, технологии мультимедиа стали все глубже проникать в нашу жизнь, изменяя, на первый взгляд, привычные вещи. В связи с этим, появилось множество технико-программных продуктов, позволяющих скрасить времяпрепровождение. Одной из таких разработок является «интерактивная песочница»[1] (ИП).
Одним из основных элементов ИП является сенсор глубины, или 3D сенсор. Примерами сенсоров глубины являются Microsoft Kinect и ASUS Xtion. Данное устройство генерирует карту глубины, которая используется в программном обеспечении ИП. Основной проблемой сенсоров глубины является погрешность определения дистанции до наблюдаемых объектов по времени: карта глубины не статична даже если наблюдение происходит за статичными объектами. И если для генерации обычного изображения, из карты глубины, данная погрешность незначительна, то для генерации поверхности в технологии NVIDIA Apex, данная погрешность неприемлема. Без механизма фильтрации, сгенерированная поверхность Apex так же не будет статична, что приведет к неверному поведению частиц. Так же, генерируемая поверхность является неровной и имеет разрывы.
Поэтому, целью было разработать быстрый алгоритм сглаживания карты глубины 3D сенсора для уменьшения погрешности и ликвидации дефектов.
Кадр Глубины
Кадр глубины представляет собой матрицу 320х240 значений с плавающей точкой одинарной точности. Каждый элемент матрицы описывает удаленность «пикселя» в миллиметрах. Пример карты глубины представлен на рисунке 1.
Результирующая карта глубины, которая получается с устройства, может отличаться, в зависимости от самого стройства. Например, размер карты глубины у Microsoft Kinect — 640x480, полученное путем программного увеличения изображения на самом устройстве, а у ASUS Xtion — 320x240.
Сглаживание кадра глубины
Одним из самых популярных методов сглаживания зашумленных данных является метод сплайнов. В статье [2], детально описывается алгоритм сглаживания, основанного на ДКП-фильтре. Основная идея алгоритма основана на выделение незашумленного сигнала. Представим входной сигнал как y. Тогда, мы можем промоделировать y как:
y = ŷ + r, (1)
где r — шум,
ŷ — сглаженный сигнал.
Используя преобразования, описанные в [2], сглаженный сигнал ŷ аппроксимируется формулой (2)
(2)
Где: DCTm(.) - дискретное косинусное преобразование второго типа
DCTm-1(.) - обратное дискретное косинусное преобразование второго типа
Γm - mxm-мерная квадратная матрица, вычисляемая по формуле 3.
Операция ○ - означает поэлементное умножение.
(3)
Где: 1m — mxm матрица единиц.
s — внешний параметр, определяющий сглаживание.
Λm - mxm матрица, вычисляемая по формуле 4.
Операция ÷ означает поэлементное деление.
(4)
Следует учесть, что y из формулы (2) является предварительно обработанным входным сигналом. Он дополнительно обрабатывается 2мя матрицами d и b. Общий алгоритм фильтра представлен в листинге 1
Листинг 1. Алгоритм фильтрации.
Значения параметров s, ε, λ, и Ni, подбирались эмпирически, пока не была достигнута удовлетворенность результатом. Для работы системы эти параметры были установлены следующим образом:
s = 10.0;
ε = 0.01;
Ni = 1;
λ = 1;
Результат работы алгоритма представлен на рисунках 1-2
Рисунок 1 — Исходный кадр глубины. Рисунок 2 — Отфильтрованный кадр глубины.
Как видно на изображении 2, все разрывы были заполнены, а сама глубина сглажена. Данный кадр глубины пригоден для дальнейшего использования.
Сглаживание потока глубины
Алгоритм, описанный выше, сглаживает карту глубины, делая поверхность, которая будет генерироваться на APEX более гладкой — без выступов и разрывов. Однако он сглаживает лишь кадр, а в динамике колебания глубины полностью не убраны и карта продолжает меняться, даже если наблюдение происходит за статичными объектами. Данный вид помех можно уменьшить, если учитывать их влияние по времени, т. е. анализировать предыдущие кадры. Один из вариантов такой фильтрации представлен в формулах 5 — 7.
(5)
Где: Hin — список, состоящий из предыдущих n-1 входных кадров и нового кадра.
Fk — выходной кадр, полученный на предыдущей итерации. На первой итерации все элементы 0.
(6)
(7)
Где: t — внешний параметр, определяющий допустимый интервал разброса значений.
Данный вариант фильтра, в первое время работы, накапливает историю кадров, которую потом модифицирует: отбрасывает самые старые кадры и заносит новые. Такой вариант фильтра оказался эффективным, потому позволяет удерживать среднее значение пикселя, если его изменения незначительны. Как было замечено из наблюдений шума в кадре глубине, значения пикселя колеблются в некотором интервале. Данный фильтр позволяет установить среднее значение интервала, в качестве выходного пикселя, но так же и учитывает то, что объекты на изображении так же могут меняться.
Результаты работы фильтра представлены на рисунках 3-4
Рисунок 3 — Плоскость, сгенерированная Рисунок 4 — Плоскость, сгенерированная
по необработанной глубине по сглаженной глубине
Заключение
По полученным результатам можно сделать вывод об успешной работоспособности алгоритма. Проанализировав его работу, были подобраны удовлетворяющие входные параметры, что позволило получать хорошее сглаживание при сравнительно небольшими затратами вычислительного времени.
Однако качество кадра глубины напрямую зависит от устройства, который его генерирует, и получение более «достоверной» глубины можно только при увеличении разрешения кадра.
Рецензенты:
Берестнева О.Г., д.т.н., профессор, Институт кибернетики ТПУ, г.Томск;
Кориков А.М., д.т.н., профессор, зав.кафедрой АСУ факультета систем управления, ФГБОУ ВПО «Томский государственный университет управления и радиоэлектроники», г.Томск.
Библиографическая ссылка
Голенков В.В., Гергет О.М. АЛГОРИТМ СГЛАЖИВАНИЯ ПОТОКА ГЛУБИНЫ ДЛЯ ПОСЛЕДУЮЩЕЙ ГЕНЕРАЦИИ ПОВЕРХНОСТИ НА ТЕХНОЛОГИИ APEX // Современные проблемы науки и образования. – 2014. – № 6. ;URL: https://science-education.ru/ru/article/view?id=16529 (дата обращения: 05.11.2024).