Алгоритмы обработки трёхмерных изображений

Задачи трёхмерного компьютерного зрения на семинаре

На нашем семинаре мы уже довольно давно работаем с так называемыми облаками точек. Они представляют собой трёхмерные изображения, которые формируются lidar-сканерами. Физически это неупорядоченные наборы точек с координатами (x, yz). Облако точек, полученное при сканировании комнаты, выглядит примерно так (картинка из статьи  C. Sok, M. Adams "Visually Aided Feature Extraction from 3D Range Data"):    

источник: "Visually Aided Feature Extraction from 3D Range Data"

Мы рассматриваем самые разные задачи, от простых - удаление шума - до более сложных: распознавание ("что перед нами") и сегментации ("из каких частей оно состоит"). Все они естественным образом используют параллельные вычисления, поскольку современные сканеры порождают облака из сотен тысяч и даже миллионов точек.

Недавно у нас появились задачи, связанные со зрением роботов:

  • поиск точки подвеса предмета - необходимо определить точку на предмете, за которую предмет может быть подвешен на штыре;
  • построение траектории робота с использованием только данных лидара. 

Начали использовать методы машинного обучения, например, исследуем нейросети PointNet и PointNet++. Это весьма интересное направление, т.к. долгое время вообще было непонятно, как учиться на сырых облаках точек. Ведь это абсолютно неупорядоченная структура данных, в ней нет никаких связей. Поэтому считалось необходимым сначала преобразовать облако в более высокоуровневое представление (воксельное изображение, например), а потом уже обучать модель глубокого обучения. И только с появлением PointNet началась история машинного обучения непосредственно на облаках точек.

Студенческие работы

В минувшем 2026м году были защищены работы:

  • Исследование эффективности переноса вычислений с мобильных роботов на внешний сервер при ориентировании в помещении (магистерская диссертация) - с помощью симуляционного моделирования исследовали стратегии балансировки вычислений между роботом и внешним, более мощном сервере в зависимости от качества связи;
  • Сегментация трёхмерных изображений древесной растительности с помощью случайного леса (бакалаврская выпускная работа) - использовали классическое машинное обучения для отделения листвы на трёхмерных сканах лесных деревьев;
  • Итерационное выравнивание трёхмерных точечных изображений (бакалаврская выпускная работа) - здесь мы пытались выяснить, какой из вариантов алгоритма ICP (iterative closest point) наилучшим образом оптимизируется на GPU

А теперь немного теории

Аппаратная часть

LiDAR расшифровывается как Light Detection and Ranging.  Лидар испускает лазерный луч, замеряет время до прихода отраженного луча, и потом рассчитывает расстояние до препятствия.  Каждый такой замер даёт одну точку, вместе эти точки составляют облако точек

В сканере, дающем точки двумерного пространства,  луч отражается от вращающегося зеркала, формируя двухмерный профиль окружающей сцены.  В трёхмерном сканере происходит дополнительный поворот в другой плоскости. На картинке ниже (из S.Islam et al "Autonomous Driving Vehicle System Using LiDAR Sensor") показана схема лидара:

 

Как правило, роботы и беспилотные автомобили оснащаются не только лидаром, но и другими сенсорами (RGB-камерой, например). Далее полученные изображения объединяются (sensor fusion), что даёт более информативную картину окружающего пространства. 

Трёхмерные изображения

Существует много способов представления трёхмерного объекта в цифровом виде:

  • облако точек - представление самого низкого уровня, неупорядоченный набор точек трёхмерного пространства;
  • полигональная модель - точки соединены рёбрами, т.е. есть информация о соседстве точек;
  • воксельное изображение - состоит из трёхмерных кубических элементов (по аналогии с плоскими пикселами)

источник: Shape reconstruction with onets

Коллекции облаков точек

Для оценки качества алгоритмов жизненно необходимы разнообразные облака точек. К счастью в открытом доступе есть широкий ассортимент трёхмерных сканов: 

  • ScanNet - аннотированные трёхмерные изображения интерьеров помещений
  • S3DIS (Stanford Large-Scale 3D Indoor Spaces) - большие облака точек с метками комната/объект

Подавление шума

Каким бы качественным ни был лидар, часть точек сгенерированного облака являются выбросами, т.е. слишком далеки от сканированной поверхности. Таким образом, процедура очистки облака от шума является необходимой частью предобработки. 

Методов удаления шума существует много. Так, например, метод статистического удаления выбросов (Statistical Outlier Removal, SOR) очищает трехмерное облако точек, анализируя расстояние от каждой точки до соседних.  Для каждой точки вычисляется среднее расстояние до заданного количества соседних точек, после чего удаляются точки, среднее расстояние до которых превышает порог стандартного отклонения.

Сравнение облаков точек

Итак, у нас есть два облака точек, очищенных от шума. Как выяснить, насколько они похожи? Для сравнения точечных изображений существуют особые метрики

  • классическая метрика Хаусдорфа
  • метрика Чамфера (Chamfer distance) 

Локальные характеристики поверхности

Важнейшим инструментом для исследования окрестности данной точки облака P является ковариационная матрица, которая строится по соседним точкам облака. С её помощью можно приближённо вычислить нормаль к поверхности в точке (point normal), а анализ её собственных значений и собственных векторов (principal component analysis, PCA) позволяет определить такие геометрические характеристики, как вытянутость и вариативность. Собственный вектор, отвечающий наименьшему с.з. даёт нормаль, а остальные с.в. - основные направления вытянутости поверхности в окрестности точки P

Облака точек и машинное обучение

Первой глубокой нейронной сетью, разработанной для прямой обработки облаков точек, стала PointNet. Она была предложена в статье PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation в 2016м году. До этого облака точек часто превращали в воксели или в набор 2D‑проекций, чтобы использовать привычные свёрточные нейросети (CNN). PointNet решает задачу иначе: она обрабатывает точки напрямую и явно учитывает неупорядоченность точек облака.

Интересно, что PointNet может решать несколько различных задач:

  • Классификация 3D‑объектов (например, «это стул», «это стол»).
  • Семантическая сегментация облака точек (каждой точке присваивается метка: «сиденье», «ножка», «спинка» и т. д.).
  • Частичная сегментация (разбиение объекта на неименованные части).

Упрощённо схему работы PointNet можно представить так:

    На каждую точку независимо подаётся небольшой многослойный перцептрон (MLP), который извлекает локальные признаки для каждой точки.

  1.     Далее происходит глобальная агрегация признаков через симметричную операцию (обычно max‑pooling по всем точкам), чтобы получить единый вектор признаков для всего облака. Эта операция инвариантна к порядку точек.
  2.     Далее этот глобальный вектор используется либо для классификации (какой это объект), либо, в случае семантической сегментации, комбинируется с индивидуальными признаками точек, чтобы предсказать метку для каждой точки.

Важная часть архитектуры — T‑Net (Transformation Network). Это небольшая сеть, которая предсказывает аффинное преобразование (матрицу вращения/масштаба) для входных координат или для признаков. Благодаря наличию этого блока PointNet становится устойчивой к жёстким преобразованиям облака (поворотам, сдвигам, масштабированию).

источник: PointNet - Deep Learning