Как создать 2D карту комнаты по нескольким изображениям / кадрам фильма?

Я хотел бы создать простую двухмерную карту комнаты, получая изображения (потолок) всех направлений (360° - например, кадры фильма), распознавая стены по обнаружению краев, удаляя другие нежелательные объекты, объединяя изображения в правильном положении (см. стены, панорама) и, наконец, создайте приблизительную 2D-карту (глядя на нее сверху). Получение масштаба было бы другим параметром, который мог бы быть полезным.

У меня есть некоторые собственные идеи на данный момент, например, с использованием алгоритма Собеля, но было бы интересно, если бы кто-нибудь знал, что какой-то проект или программное обеспечение (GPL, бесплатное программное обеспечение предпочтительно) уже делает это, так как я все еще ищу некоторые примеры, что может помочь мне.

Благодарю.

4 ответа

У меня был похожий проект "кое-что" для стажировки, и в конце концов, стажировка так и не была закончена, потому что у нас не хватило времени (3 месяца, и денег ни на что не было).

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

Во-вторых, мы собирались поместить "хорошо известный / понятый" объект рядом с каждой стеной и использовать его для интерполяции размера (длины / высоты) каждой стены.

Теперь этот метод потребует больше "времени" для настройки, потому что вам нужно будет поместить объект на каждую стену, а затем сфотографировать каждую стену с небольшим перекрытием, чтобы в последствии вы могли иметь возможность соединить его вместе. Затем пользователь сообщит программе, где расположен каждый "угол / край", чтобы программа знала "общую форму" комнаты, а затем использовал объект, расположенный на стене, для интерполяции длины / высоты каждой стены.

Теперь имейте в виду, что это будет относительно ручной процесс, но с хорошо разработанным программным обеспечением / процессом это может быть относительно быстро. Под этим я подразумеваю, что самые медленные ручные шаги - это поместить объект на стену, а затем сделать "панораму" комнаты. После того, как изображения были загружены в компьютер, он может позаботиться о предварительной обработке, собрать их вместе, а затем вызвать изображение с помощью некоторых "линейных инструментов", с помощью которых вы можете сообщить программе, где находится угол / и т. Д., И тогда он будет делать расчет / корректировку / калибровку / и т.д...

Есть два способа, которыми я могу видеть это (своего рода) работу:

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

2) Создать реальный объект управления, который устройство может использовать в качестве "базового уровня". Сделайте неприятно ярко-красный куб, который известен как 10x10x10cm; поместите это в углу комнаты; возьмите фото / видео стены из угла в угол, используйте обнаружение изображения, чтобы найти границы стены и распознавание объекта для куба; вычисление размеров стен - простая математика с тех пор. В зависимости от объектива этот метод может быть менее чувствителен к искажению фокусного расстояния и тому подобному, но для точного считывания я бы подумал, что вам все равно нужно будет учитывать характеристики объектива.

Удачи с этим, это не маленькое начинание. Обнаружение изображения только для стен будет проблемой.:)

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

Фототуризм: изучение фотоколлекций в 3D

В частности, посмотрите на раздел "Моделирование на основе изображений" (3.1).

Я думаю, что вам нужна структура из движения, это метод получения трехмерных облаков точек из 2D движущихся изображений (видео), я мог бы порекомендовать вам следующие страницы:

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

С Nexus One это будет медленно, но, возможно, с более новыми телефонами вы могли бы использовать их GPU и оптимизировать некоторый код, чтобы он работал быстрее. Если бы это был я, я бы предпочел снять видео и сделать настольное приложение, а затем перенести его на Android, но я мало знаю о разработке Android.

Другие вопросы по тегам