Як отримати густі точкові хмари від стереокамер?


12

Я намагаюся використовувати стереокамеру для реконструкції сцени, але зазвичай можу отримати лише розріджені хмари точок (тобто більше половини зображення не має належної інформації про глибину).

Я розумію, що алгоритми стереообробки покладаються на наявність текстур у зображеннях і мають кілька параметрів, які можна змінити для отримання кращих результатів, таких як діапазон невідповідності або розмір вікна кореляції. Наскільки я налаштовую ці параметри, я ніколи не можу отримати результати, які навіть віддалено близькі до того, що можна отримати за допомогою активного датчика, такого як Kinect.

Причина, чому я цього хочу, полягає в тому, що дуже часто хмари точок, що відповідають сусіднім регіонам, не мають достатнього перекриття для отримання відповідності, тому реконструкція сильно порушена.

Моє запитання до фахівців Computer Vision є наступне: що я можу зробити, щоб отримати загальні хмари точок взагалі (без довільної зміни середовища мого офісу)?


Це гарне запитання, але я думаю, що більше деталей потрібно. За якими алгоритмами ви намагалися обчислити відповідність? Чи можете ви пояснити, що ви маєте на увазі під "сусідніми регіонами" та "перекриттями?".
Джош Вандер Хук

Коли я кажу "сусідні регіони", я маю на увазі ділянки фізичного простору, які не є рівнозначними, але мають не порожній перетин, який я назвав "перекриттям". Тобто, такі регіони, які б генерували хмари точок, які можна було б узгодити та зшити в алгоритмі ICP.
georgebrindeiro

Щодо алгоритму, я все ще використовую найпростіше можливе рішення, яке я міг би знайти: стерео_image_proc ROS-вузол, який застосовує алгоритм відповідності глобального блоку, наявний у OpenCV. Мені б дуже цікаво почути про параметри параметрів, які, можливо, не будуть мені доступні безпосередньо через вузол ROS або інші алгоритми, які, як відомо, дають кращі результати.
georgebrindeiro

Відповіді:


4

Ви можете спробувати пропустити виявлення чіткої точки і просто щільно пробити зображення (як сітку або так) і обчислити дескриптор функції у кожній точці вибірки. Ви, ймовірно, можете навіть піти далеко до обчислення дескриптора для кожного пікселя.

Ви можете втратити інваріантність масштабу, але я думаю, що це не зашкодить стерео зору, оскільки об'єкти будуть приблизно однаковими в обох зображеннях.

Іншим підходом може бути поєднання декількох чітких алгоритмів виявлення точок: кутів, країв, крапок тощо. Тоді вам потрібно використовувати один і той же алгоритм дескриптора функцій для всіх виявлених точок, однак ця остання частина може бути дещо складною для реалізації.


2

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

Рівняння пари паралельних камер:

  • половина відстані між камерамиг=
  • f= фокусна відстань камер (вважається однаковою)
  • Кадри координат:
    • х,у,z=
    • уR,vR координати камери у правій камері з точки зору робота (u горизонтальний, v вертикальний)
    • уL,vL координати камери в лівій камері
    • Примітка: координати камери мають свій початок на координатному кадрі між камерами (тобто осі u стикаються з протилежними напрямками)

уL=f(х-г)zуR=f(х+г)z

zуR=f(х+г)zуL=f(х-г)

z(уR-уL)=2гf

z=2гfуR-уL

у=vLz+гff

х=уLz+гff

За допомогою цих рівнянь можна обчислити щільну стерео хмару. По одному для кожного пікселя на ваших камерах.


Дякую за зусилля, але я знайомий зі стереомоделюванням. Зазвичай проблема полягає саме у відповідності між координатами (u, v) у лівій та правій камерах. muksie дав кілька ідей щодо того, як з цим боротися, і sylvain.joyeux вказав на чудову стереобібліотеку, яка призводить до поліпшення результатів, хоча ...
georgebrindeiro

1

Коли ви говорите: "понад половина зображення не має належної інформації про глибину", яка половина?

Одне з проблем, з яким ми стикалися, полягає в тому, що якщо відстань до об’єкта має той самий порядок, що і ваш базовий рівень (як правило, асоціюється з дуже ширококутними камерами), то "стандартні" щільні стерео алгоритми працюють не так добре. Ми використовували бібліотеку libelas, і її розробники сказали нам, що це називається "великим базовим стерео" і є ще однією проблемою.


Коли я сказав, що половина зображення не має належної глибинної інформації, я мав на увазі, що з усіх пікселів лише приблизно половина має обчислювані розбіжності (не обов'язково утворюючи одну суміжну область). У мене немає тієї самої проблеми, про яку ви згадали зі співвідношенням відстань до об'єкта / базової лінії, але мені було дуже цікаво почути про цю бібліотеку і що це може бути проблемою. Дякую!
georgebrindeiro

1
Так чи інакше, я спробую випустити libelas , оскільки знайшов обгортку для ROS !
georgebrindeiro

0

Погляньте на лідери KITTI Stereo Benchmark . Цей орієнтир карає алгоритми, які не створюють розбіжності в будь-якій точці, тому найкращі виконавці дають щільні результати (навіть якщо вони не мають багато підстав для своєї оцінки в багатьох точках). Деякі методи мають загальнодоступний код, який пов'язаний, який ви можете спробувати.

Зауважте, що вони не штрафуються за тривалий час, тому багато методів займуть порядку виконання хвилин на зображення і можуть не відповідати вашому застосуванню. Було введено багато методів на основі CNN, хоча це дуже добре, але все ще працює менше ніж за секунду (на GPU). Принаймні один із них (CRL) має публічний код.

Якщо ви все одно не отримаєте пристойних оцінок глибини з цими на своїх зображеннях, то, можливо, ви просто бачите межі того, що можливо при видимому підході. Принципово має бути чітка текстура в районі, щоб можна було добре відповідати точкам, або вам потрібна основа для створення певних сильних припущень (наприклад, гладкості) в без текстурних регіонах.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.