Алгоритм определения размера комнаты из видеопотока - PullRequest
4 голосов
/ 28 сентября 2011

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

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

Спасибо

Редактировать: Хорошо, немного разъяснений, которые я только что получил от вовлеченных людей.Я в основном не контролирую, как происходит подача видео, и не могу гарантировать наличие нескольких источников данных.У меня, однако, есть определенное местоположение точек в комнате, и я должен поместить что-то относительно этой точки.Поэтому я, вероятно, хотел бы попытаться определить края комнаты, затем определить, насколько далеко расположено данное местоположение в комнате, а затем угадать, насколько большая комната.

1 Ответ

4 голосов
/ 28 сентября 2011

Ужасно сложная (но интересная!) Проблема.

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

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

  • Снимки будут содержать информацию о местоположении и ориентации камеры.Например, предположим, что вы получаете два снимка с одинаковой ориентацией камеры, где два снимка были сделаны камерой на расстоянии трех футов друг от друга по горизонтали.Вам нужно будет определить исходную точку для трехмерного пространства, в котором расположены камеры, например, вы можете сказать, что левое изображение имеет камеру в (0,0,0), а правое изображение в (3,0,0), и оба будут направлены вперед, что было бы ориентацией (0,0,1).Или что-то в этом роде.
  • Теперь приходит оператор и отмечает два угла комнаты на обоих снимках.Таким образом, у вас есть 2 набора 2D координат для каждого угла.
  • Вы должны знать детали вашей камеры и объектива (поле зрения, искажение объектива, аберрации и т. Д.).Чем больше вы знаете о том, как ваша камера искажает изображение, тем точнее вы можете сделать свою оценку.Это то же самое, что делает программное обеспечение для сшивания панорамы, чтобы добиться лучшей строчки.См. PanoTools для получения дополнительной информации по этому вопросу.
  • А теперь самое интересное: теперь вы будете делать обратную проекцию перспективы для каждой из двух точек 2D.Перспективная проекция берет точку в 3D-пространстве и определение камеры и вычисляет 2D-точку.Это используется для представления трехмерных объектов на плоской поверхности, например на экране компьютера.Вы делаете обратное: для каждой 2D-точки вы будете пытаться получить 3D-координату.Поскольку в 2D-точке недостаточно информации для определения глубины, лучшее, что вы можете сделать из одной 2D-точки, - это получить линию в 3D-пространстве, которая проходит через объектив и через указанную точку, но вы не знаете,как далеко от объектива дело.Но у вас есть одна и та же 2D точка на двух изображениях, поэтому вы можете вычислить две 3D линии из разных местоположений камеры.Эти линии не будут параллельными, поэтому они будут пересекаться в одной точке.Точка пересечения линий 3D будет хорошая оценка местоположения 3D точки в пространстве, а в координатах вашей справки камеры 3D пространстве.

Довольно просто, да

...