1

Я пытаюсь найти надежный метод расчета угловых точек контейнера. Из идеи этой угловой точки является вычисление центральной точки контейнера для локализации робота, это означает, что вычисленная центральная точка будет местом назначения робота, чтобы выбрать контейнер. Для этого я ищу любые предложения по вычислению угловых точек или может быть, если есть возможность непосредственно вычислить точку центра. До этого момента для обработки 3D-данных используется библиотека PCL C/C++. Изображение ниже - снимок экрана контейнера.
заранее.Расчет центральной точки для локализации робота в 3D-данных

afterApplyingPassthrough

+0

Вы пытаетесь найти центр этого прямоугольника? –

+0

На самом деле я не думал о том, что поиск центра прямоугольника может также решить проблему. Это означает, что если мой абитуриент должен найти углы и вычислить центр, у которого в конце есть несколько шагов. Как вы упомянули, поиск центра может быть лучшим решением. Поиск центра и добавление смещения. вы предлагаете какие-либо возможности для его вычисления непосредственно в PCL? –

+1

Есть ли у вас данные глубины? Я не вижу никаких внутренних поверхностей этого контейнера ... (я понимаю, что это 3D-данные, но может ли ваш датчик разрешить только переднюю поверхность тележки?) –

ответ

1

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

Если вы изолируете тележку, вы можете применить простую среднюю точку (центроид) , поочередно, если это неточно, вы можете попробовать найти bounding box изолированной тележки (min max в основных направлениях), а затем взять центр тяжести этого ограничивающего прямоугольника (это должно быть более точным, но все равно потребуется небольшое вертикальное смещение из-за верхних ручек).

Если вы не можете изолировать корзину или другие методы не работают, вы можете попробовать использовать PCL sample consensus именно SACMODEL_LINE. Это будет задействованная стратегия, но даст очень солидные результаты, основополагающие пройдите и найдите каждую строку и вычтите ее элементы из облака, чтобы найти следующую лучшую строку. После того, как у вас есть 4 первичные линии корзины, используйте их параметры, чтобы найти ваш центр тяжести. * это также было бы надежным против случайных предметов, находящихся в или на тележке, а также тележек разного размера (при условии, что они всегда имели линейные перпендикулярные стены)

+0

Отличные предложения. Что вы говорите относительно (1) идентификации пола и (2) отфильтровываете точки, которые находятся слишком близко к полу, чтобы удалить колеса и сохранить только корзину, поэтому впоследствии я мог использовать ограничительную рамку (3). ? –

+1

Это довольно четкие объяснения ... насколько реально реализовать его, слишком много объяснять. Это супер хорошо документировано с помощью учебников и веб-документации классов. Вот хорошее место для начала: http://pointclouds.org/documentation/tutorials/ Я предлагаю попробовать учебные пособия, как они есть, а затем модифицировать их в соответствии с вашими потребностями. –

+0

На самом деле я изучал учебники PCL и использовал RANSAC для плоской установки и т. Д. Не могли бы вы упомянуть какой-нибудь конкретный пример, в котором возможно обнаружение и удаление плоскости, как-то было бы легче отфильтровать колесо после и найти прямоугольную призму ограничивающая коробка на тележке? –

2

Я сделал следующие вещи:

  • Я бинаризуется изображение (черные пикселей = 0, зеленый пикселей = 1),
  • инвертируется изображение (черные пиксели = 1, зеленый пикселей = 0),
  • размыл изображение с ядром 3x3 N-раз и расширил его одним и тем же ядром М-раз.

Слева: N = 2, М = 1; Справа: N = 6, М = 6

enter image description hereenter image description here

После этого:

  • Я вычислен контуры всех не -zero area и
  • удалил контур, который окружал все изображение.

Это такие контуры, которые остались:

enter image description hereenter image description here

Я не знаю, как «типичный» входное изображение выглядит как в вашем случае. Поскольку у меня только есть доступ к одному образцу, я предпочел бы не спекулировать о «общем решении», которое вам подходит. Но решить этот частный случай, вы могли бы проанализировать каждый контур следующим образом:

  • вычислить rotatated прямоугольника, который подходит лучше всего вокруг контура (вам нужно что-то похожее на minAreaRect from OpenCV)
  • вычислительной области прямоугольника и контур интерьера
  • Если разница между площадью контура и площадью поворотного ограничивающего прямоугольника мала, контур имеет приблизительно прямоугольную форму
  • найти контур, который является прямоугольным и удовлетворяет некоторым другим условиям (например: типичная площадь контейнера). Предположим, что это принадлежит контейнеру и вычислить его центр.

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

+0

Картинка, которую я опубликовал выше, представляет собой скриншот данных pointcloud. Это означает буквально, что обработка не должна быть на этом изображении, но данные глубины. но спасибо, кажется, хорошо, если это 2D-изображение. не так ли? –

Смежные вопросы