Сканирующие сенсоры, подобные Microsoft Kinect [1,8], Asus X-tion и PrimeSense стали дешёвой альтернативой лазерным сканерам в самых разных областях, таких как робототехника, естественное взаимодействие с компьютером, ориентирование внутри помещения. Kinect был изначально разработан для распознавания движений тела человека и его жестов в компьютерных играх. Тем не менее, возможности Kinect завоевали сенсору популярность и в других областях [2]. Особое распространение Kinect получил среди инженеров-энтузиастов. Программисты и инженеры со всего мира получили возможность использовать в своей работе дешёвый трёхмерный сканер, что вылилось во множество реализованных проектов.
Сенсор Kinect считывает цветовые и глубинные данные одновременно на частоте до 30 кадров в секунду. Разрешение инфракрасного сенсора составляет 1,280 × 1,024 пикселей, однако максимальный размер выходного изображения не превышает 640 × 480 пикселей. Это связано с привязкой к возможностям внутреннего процессора Kinect и пропускным возможностям шины USB.
В данной работе разрешение захватываемой для последующей обработки карты глубины является относительно небольшим и содержит 320 × 240 пикселей. Тем не менее, это означает, что каждый кадр содержит 76,800 точек с данными. Измеренные дистанции, предоставляемые сенсором, нормализованы и разбиты на дискретные значения от 0 до 2,047. Каждая точка карты глубины представляет собой 11-битное целое значение, в котором один бит отведён для того, чтобы помечать пустые пиксели, не содержащие данных. Общая стабильность полученных изображений низкая.
Принцип работы сенсора Kinect заключается в следующем: проецируется заранее известный инфракрасный шаблон на поверхность (рис. 1) с помощью встроенного инфракрасного проектора, измеряя разницу между полученной проекцией и сохранённым в памяти устройства шаблоном. Выходная карта глубины содержит шум и области, не содержащие данных, что обусловлено тенями, которые отбрасывают различные объекты при освещении их инфракрасным проектором. На рис. 1 представлен обильный шум на необработанной карте глубины, представленной в оттенках серого цвета.
Рис. 1. Обильный шум на необработанной карте глубины, представленной в оттенках серого цвета
Для улучшения качества выходного изображения сенсора был предложен подход, позволяющий исключить шум на изображении и заполнить пустые области такими данными, которые бы с определённой точностью отражали действительные значения глубины в этих точках.
Поскольку Kinect был разработан с целью получения данных о глубине рабочей сцены, данная работа фокусируется на карте глубины. Предлагаемый подход обработки изображения представлен на рис. 2 и состоит из двух частей:
a. Закрашивание сокрытых областей. В данном разделе предложен алгоритм закрашивания пустых областей.
b. Шумоподавление состоит из предотвращения колебаний отдельных пикселей и целых областей на изображении.
Рис. 2. Предлагаемый подход для уточнения исходных данных
Технология работы Kinect
Kinect испускает инфракрасную сетку и получает результат при помощи CMOS камеры с инфракрасным фильтром. Внутренний процессор, разработанный компанией PrimeSense, вычисляет разницу между полученным снимком проекции инфракрасной сетки и зашитым в память контроллера шаблоном. Когда отдельная точка спроецирована на объект, расположенный ближе или дальше, чем расчётная плоскость проекции, её позиция, очевидно, будет смещена. Измерение смещения каждого пикселя посредством процедуры корреляции изображений позволяет вычислить матрицу несоответствия, которая позволяет Kinect определить истинную дистанцию от плоскости устройства до любой точки на сканируемой поверхности.
Тени в глубине изображения
Небольшое расстояние между инфракрасным проектором и инфракрасной камерой может привести к образованию тени на той стороне объекта, которая находится ближе к камере, чем к проектору. Данная проблема представлена на рис. 3.
Рис. 3. Схема лазерного пути, в случае если бы она была перекрыта объектом
Простой метод закрашивания
Для закрашивания затенённой области, могут быть использованы простейшие алгоритмы. Например, для каждого пикселя внутри области, которая не содержит в себе никаких данных о глубине, запускается простая процедура. Рассматриваются значения ближайших значимых пикселей с каждой из четырёх сторон. Затем среднеарифметическое значение этих четырёх пикселей присваивается текущей рассматриваемой точке, не содержащей данных. Данный подход представлен на рис. 4
Рис. 4. Схема простого алгоритма закрашивания пустых пикселей
Однако данный алгоритм позволяет получить только результаты низкого качества. Указанный алгоритм использует лишь информацию о ближайших пикселях и вовсе не рассматривает какое-либо значение градиента в данной области.
Быстро шагающий алгоритм
Более сложный алгоритм заполнения пустой области описан в статье [10]. Данный алгоритм основан на быстро шагающем методе (FMM, Fast Marching Method). Алгоритм начинает работу на границе пустой области и продвигается внутрь, в первую очередь, заполняя пиксели на границе области. Процедура заполнения принимает в расчёт небольшую область пикселей вокруг точки на границе, не содержащей данных. Данная точка приравнивается значению нормализованной взвешенной суммы всех рассматриваемых пикселей во взятой области. Учёт весов пикселей является важной деталью данного алгоритма. Каждый соседствующий пиксель получает свой вес в зависимости от его расстояния до рассматриваемой точки. Наибольший вес получают пиксели, лежащие непосредственно рядом с точкой, рядом с нормалью к границе пустой области и те, что находятся на контурах данной границы. Как только значение текущего пикселя определено, процедура перемещается к следующей неизвестной точке, используя FMM, который обеспечивает заполнение пустых областей рядом с уже известными пикселями в первую очередь [9]. Рис. 5 иллюстрирует закрашиваемую маску карты глубины, представленной на рис. 1. Белые области отмечены также внутри пикселей в реализации алгоритмов. Границы областей белого помечены как BAND.
Результат применения второго подхода, основанного на быстро шагающем методе, продемонстрирован на рис. 6. Метод FMM позволяет получить результаты, схожие с описанными в статьях [5] и методе Olivera [6]. Тем не менее, время работы FMM во многих случаях меньше, чем, например, у алгоритма BSCB [9]. Более того, представленный метод достаточно легко реализовать.
Рис. 5. Закрашиваемая маска карты глубины, представленной на рис. 1.
Рис. 6. Результат работы алгоритма закрашивания, основанный на FMM
Понимание проблемы
Даже в случае статичного положения устройства, значение пикселя будет колебаться в небольшом диапазоне. В результате (из-за колебания значения пикселя) изображение становится крайне нестабильным. Очевидно, что во временном отрезке, содержащем 10,000 кадров, приблизительно 2,5% сохраняют одно значение, 20% колеблются между двумя значениями, 38% перескакивают между тремя различными уровнями и остальные пиксели имеют 4 и более уровней. Естественно, среднее число уровней у пикселей увеличивается с ростом длины рассматриваемого временного отрезка [7].
Рис.7 демонстрирует энтропию каждого пикселя на карте глубины, вычисленную на временном отрезке, содержащем 1000 кадров с расстоянием в 1,0 м от сканируемой плоскости. Ярко выраженные полосы увеличенной энтропии вызваны одним из адаптивных алгоритмов, который используются процессором PrimeSense. Вне полос разброс значений энтропии приблизительно одинаков.
Рис. 7. Энтропия каждого пикселя вычисляется с помощью 1000 кадров на расстоянии 1,0 м.
Упрощенный фильтр Калмана
Описанные колебания и мерцания пикселей могут быть устранены с помощью фильтра Калмана [3]. Данный фильтр представляет собой аккумулирующий буфер, в котором текущий кадр комбинируется с предыдущим через определённый коэффициент. Вес коэффициента, который приписывается кадру Zk+1 определяется коэффициентом Калмана K, который вычисляется итеративно:
,
где представляет аккумулирующий буфер, – выражение, которое описывает поведение каждого пикселя во времени.
Тем не менее, оригинальный подход не может быть использован, так как мы не в состоянии обеспечить F (K) выражение. Таким образом, итерационное выражение для расчета коэффициента веса не имеет смысла, поэтому, мы используем упрощенный буфер накопления. Весовой коэффициент К (0,0 ≤ λ ≤ 1,0) представляет собой количество нестабильных пикселей в кадре, а не итеративный коэффициент. Количество нестабильных точек вычисляется во время сравнения текущих и предыдущих кадров, где каждая изменяемая точка рассматривается в качестве нестабильной.
Буфер накопления не только уточняет края объектов, но и повышает стабильность всего изображения.
Заключение
Существуют многие параметры, которые влияют на датчик в данной ситуации. Например, датчик в состоянии обнаружить какие-либо отражающие материалы. Кроме того, любые тени от наблюдаемого объекта увеличивает количество не выявленных и пустых мест. Предложен подход, основанный на алгоритме закрашивания Александра TELEA и упрощенном фильтре Калмана. Описанный в работе подход улучшает общую стабильность изображения и заполняет красками пустые области. В дальнейших работах могут быть реализованы более сложные алгоритмы, например, совместный двусторонний фильтр или алгоритм восстановления глубины, как представлено в [4], который использует сегментацию изображения наравне с голосованием для того, чтобы восстановить недостающую информацию о глубине.
Рецензенты:
Авдеева Д.К., д.т.н., профессор, директор ООО «Медприбор», г. Томск;
Ким В.Л., д.т.н., профессор кафедры вычислительной техники Института кибернетики, ФГАОУ ВО НИ ТПУ, г. Томск.