#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-кадр, один из способов, которым вы можете решить эту проблему, заключается в том, что в первых нескольких кадрах вы обнаруживаете пол совершенно правильно ? создайте маску этого сегмента и используйте ее в качестве маски/фиксированного фона в других кадрах. Таким образом, вам не придется снова и снова рассчитывать/оценивать этаж.