Алгоритм обнаружения грунта

Это третья статья моего руководства «Обработка облака точек». Учебник «Обработка облака точек» удобен для начинающих, в нем мы просто представим конвейер обработки облака точек от подготовки данных до сегментации и классификации данных.

В предыдущем уроке мы вычисляли облака точек по данным о глубине без использования библиотеки Open3D. В этом уроке мы сначала опишем системные координаты. Затем мы внимательно проанализируем облака точек, взяв в качестве примера наземное обнаружение. Мы также представим организованные облака точек, которые представляют собой интересное трехмерное представление.

Table of contents:
· 1. Computer vision coordinates systems
· 2. Ground Detection
· 3. Organized point cloud
· 4. Conclusion

1. Системы координат компьютерного зрения

Прежде чем начать, важно понять обычные системы координат в компьютерном зрении. За ними следуют датчики Open3D [1] и Microsoft Kinect[2]. В компьютерном зрении изображение представляется в независимой двухмерной системе координат, где ось X указывает слева направо, а ось Y — сверху вниз. Что касается камер, начало 3D-системы координат находится в фокусе камеры, где ось X указывает вправо, ось Y указывает вниз, а ось Z указывает вперед.

Начнем с импорта необходимых библиотек:

Для лучшего понимания давайте импортируем облако точек из файла PLY, создадим 3D-систему координат по умолчанию с помощью Open3D и отобразим их:

Зная, что синяя, красная и зеленая стрелки представляют ось Z, ось X и ось Y соответственно, вы можете видеть, что облако точек представлено в той же системе координат, что и система координат Open3D. Теперь давайте получим точки, имеющие минимальное и максимальное значения каждой оси:

Мы можем распечатать их, но для лучшей визуализации мы создадим геометрию сферы в каждой позиции точки. По умолчанию Open3D создает 3D-геометрию в исходной позиции:

Чтобы переместить сферу в заданное положение, требуется трансляционное преобразование. В приведенном ниже примере сфера переносится вектором [1,1,1]:

Вернемся к нашему примеру и назначим каждой сфере цвет. Для каждой позиции мы создаем сферу и переводим ее в эту позицию. Затем мы назначаем правильный цвет и, наконец, добавляем его для отображения в конце.

Хм, мы видим, что желтая сфера, соответствующая y_min , находится на стене, а зеленая сфера, соответствующая y_max, находится на земле. Действительно, ось Y представляет высоту точек: в реальном мире самая высокая сфера — желтая, а самая нижняя — зеленая. Однако, поскольку ось Y направлена ​​вниз, желтая сфера имеет минимальное значение, а зеленая сфера — максимальное значение.

Еще одна интересная сфера — голубая сфера, которая находится в начале координат. Как мы упоминали в предыдущем уроке, пиксели, имеющие 0 в качестве значения глубины, являются точками шума, поэтому точки, расположенные в начале координат, являются точками, вычисленными из этих пикселей шума (когда z=0, затем x=0 и y=0).

2. Обнаружение земли

Теперь, когда мы отобразили некоторые важные точки, как можно обнаружить землю? В предыдущем примере зеленая сфера лежит на земле. Точнее, его центр, соответствующий самой высокой точке по оси Y, является наземной точкой. Допустим, чтобы обнаружить землю, мы меняем цвет всех точек, у которых есть y_max, на зеленый цвет.

Если вы отобразите облако точек, вы заметите, что не все наземные точки выделены зеленым цветом. На самом деле только одна точка, соответствующая центру предыдущей зеленой сферы, окрашена в зеленый цвет. Это связано с точностью и уровнем шума камеры глубины.

Чтобы обойти это ограничение, нам нужно добавить порог, чтобы все точки, имеющие координату y в [y_max-threshold, y_max], считались наземными точками. Для этого после получения y_max мы проверяем для каждой точки, находится ли ее координата y в этом интервале, а затем устанавливаем ее цвет на зеленый. Наконец, мы обновляем атрибут цветов облака точек и отображаем результат.

В этом примере мы окрасили в зеленый цвет только точки, представляющие землю. В реальных приложениях земля извлекается для определения области, по которой можно пройти, например, в робототехнике или системах для слабовидящих, или для размещения на ней объектов, как в системах дизайна интерьера. Его также можно удалить, чтобы оставшиеся точки можно было сегментировать или классифицировать, как в системах понимания сцены и обнаружения объектов.

3. Организованное облако точек

В нашем первом уроке мы определили облако точек как набор 3D-точек. Набор представляет собой неупорядоченную структуру, поэтому облако точек, представленное набором, называется неорганизованным облаком точек. Подобно матрице RGB, организованное облако точек представляет собой 2D-матрицу с 3 каналами, представляющими координаты x-, y- и z-. точек. Матричная структура обеспечивает взаимосвязь между соседними точками и, таким образом, снижает временную сложность некоторых алгоритмов, таких как ближайшие соседи.

Допустим, например, что мы пишем исследовательскую работу и хотим показать результат нашего алгоритма обнаружения грунта в виде цифры. К сожалению, анимированную фигурку выбрать нельзя. Поэтому мы можем либо сделать скриншот облака точек, либо отобразить результат на изображении глубины, как показано на рисунке ниже. На мой взгляд, 2-й вариант самый лучший. В этом случае необходимо организованное облако точек, чтобы сохранить местоположение пикселя глубины.

Давайте создадим организованное облако точек из предыдущего изображения глубины. Сначала мы импортируем параметры камеры, как мы это делали в предыдущей статье. Мы также импортируем изображение глубины и преобразуем его в 3-канальное изображение в градациях серого, чтобы мы могли установить для основных пикселей зеленый цвет:

Чтобы вычислить организованное облако точек, мы действуем так же, как и в предыдущем уроке. Вместо выравнивания изображения глубины мы изменяем форму jj и ii, чтобы они имели ту же форму, что и изображение глубины, следующим образом:

Если распечатать форму созданного облака точек, то видно, что это матрица с 3 каналами (480, 640, 3). Если вам трудно понять этот код, вернитесь к предыдущему руководству, и если он все еще не ясен, не стесняйтесь оставлять мне свои вопросы, я буду рад помочь вам.

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

4. Вывод

В этом уроке, чтобы привыкнуть к облакам точек, мы ввели систему координат по умолчанию и реализовали простой алгоритм обнаружения земли. Действительно, обнаружение земли является важной задачей в некоторых приложениях, таких как навигация, и в литературе было предложено несколько алгоритмов. Реализованный алгоритм прост; он считает самые низкие точки землей. Однако его ограничение заключается в том, что камера глубины должна быть параллельна земле, что не относится к большинству реальных приложений.

Теперь ваша очередь, попробуйте обнаружить ближайшие объекты (которые не являются землей) и, например, придать им красный цвет. В следующем уроке мы узнаем, как предварительно обрабатывать облака точек, например, для уменьшения шума. Вы можете найти примеры здесь, в моем репозитории GitHub. Если у вас есть какие-либо вопросы или предложения, не стесняйтесь оставлять мне комментарии ниже.





Рекомендации

[1] https://github.com/isl-org/Open3D/issues/1347#issuecomment-558205561

[2] https://docs.microsoft.com/en-us/azure/kinect-dk/coordinate-systems