Orbbec и единство opencv. Обнаружение объекта на полу

#opencv #unity3d #orbbec

Вопрос:

Я использую «Opencv для единства» и orbbec astra. У меня камера установлена на потолке, и мне нужно определить наличие предметов на полу. Как я могу убрать пол?

Я не могу использовать вычитание фона, потому что через некоторое время объекты станут фоном.

Я попытался «записать» кадр без объектов в качестве фона, и каждый кадр я вычитаю из изображения глубины орбеки. Он работает очень хорошо, но через 5-10 минут он начинает издавать много шума, и его больше нельзя использовать.

 if(recordBG){
   Imgcodecs.imwrite(Application.streamingAssetsPath   "/bg.jpg", imgMat); 
   recordBG = false;
   bg = imgMat;
}
imgMat = imgMat - bg;
Core.inRange(imgMat, scalarMin, scalarMax, imgMat);
 

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

Есть ли другой способ убрать пол?

РЕДАКТИРОВАТЬ (Добавлять изображения):

Это и есть коврик.:

введите описание изображения здесь

«Белые» объекты-это imgMat после вычитания, и я ограничиваю обнаружение в нескольких сантиметрах от пола (функция Core.inRange)

введите описание изображения здесь

Это то же самое через 5 минут. Это моя проблема. между 2 изображениями ничего не изменилось

введите описание изображения здесь

Комментарии:

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

Ответ №1:

Я использовал аналогичный подход и могу сказать вам, что камеры глубины обеспечивают только оценку глубины каждого кадра, поэтому даже когда они очень точны (это не относится к Orbbec, вы не упомянули, какую модель вы используете, но у меня был плохой опыт работы с моделями Astra) значения немного отличаются между кадрами (для одних и тех же точек со стационарной камерой). Что я делаю, так это устанавливаю минимальный порог высоты, поэтому, когда я вычитаю фон, все, что находится ниже этого порога, отбрасывается. Я использую это для обнаружения людей, и в моем случае это разумный вариант, в вашем случае это зависит от высоты вашего объекта (я имею в виду, отличается ли ваш объект от шума глубины ?). Также имейте в виду, что при таком подходе у вас могут быть отрицательные значения после вычитания, что может привести к странному поведению, когда формат данных для глубины uint .

Комментарии:

1. Я использую Orbbec AStra PRO. Мои предметы могут быть даже 2-3 см высотой. Это проблема, если камера не выровнена по полу (это мой случай). Я не могу использовать минимальный порог. Проблема для меня не в шуме, я могу удалить его с помощью Erode. Проблема в том, что через несколько минут кажется, что часть пола меняет «значение» на карте глубины…

2. Каково расстояние между камерой и полом? Я знаю, что точность глубины датчика глубины Astra составляет около 1,3 см на 3 метрах.. что действительно близко к размеру вашего объекта.. если это так, я не думаю, что вы можете обнаружить свой объект только с помощью глубины..

3. Не так уж много. Он может меняться от 2 до 4 м

Ответ №2:

Я еще не работал с камерами глубины, но я работал с обычными камерами, которые возвращают 2d-кадр, один из способов, которым вы можете решить эту проблему, заключается в том, что в первых нескольких кадрах вы обнаруживаете пол совершенно правильно ? создайте маску этого сегмента и используйте ее в качестве маски/фиксированного фона в других кадрах. Таким образом, вам не придется снова и снова рассчитывать/оценивать этаж.