Фотограмметрия или восстановление 3D контуров зданий по фотографиям

coolkaas:

Программы для просмотра здесь уже упомянули: Meshlab and Blender
Google Sketchup 7 еще не руссифицирован, насколько я понимаю. Надо сменить язык на английский, тогда будет доступен для загрузки Google Sketchup 7. Я написал простейший плагин в несколько строк для открытия ply-файлов от Bundler

В планах, как я уже упоминал, создание просмотрщика на основе flash-технологий, который со временем может предоставить те же возможности, что и Microsoft Photosynth

Прошу обратить внимание, как результаты работы Bundler можно использовать прямо сейчас. Об этом пишет Andrew Ainsworth в статье http://wiki.openstreetmap.org/wiki/Photogrammetry в конце раздела про Линукс

В программе Blender: File>Import>Stanford PLY и выберите ваш файл. Дальше вращаем облако точек, чтобы смотреть на здание сверху. Нужно обедиться, открыв в меню view что проекция ортографическая, а не перспективная. Делаем скриншот.

Дальше открываем JOSM с установленным плагином PicLayer, делаем привязку скриншота и трассировку контуров здания.

Это-то как раз понятно)) а за остальное большое спасибо.

ВОТ! Это важно. Хотя бы для прикидок. А то пробовал сотовым макетики поснимать, фигня получается – 100-200 точек на фотку – мало это или много, не понятно (было. Теперь понятно). Фотиком макет попробовал – 2000 точек на фотку, уже лучше картинка вышла, хотя бы что-то напоминает.
А оказывается надо вообще 15000 !! будем пробовать на натуре при случае.

Вот жеж не графическая станция у меня)) на гиге озу при обработке каждой фотки по полтора гига свопа выкушивает)) (фотки-то всего 2 МП делал…)

И у меня такое еще ощущение, что Бандлер заточен под плоскостную архитектуру и соответствующие масштабы.
В общем, будем копать дальше…))

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

Разрешение 8 мегапикселей не дает никакого выигрыша. Только время на обработку значительно увеличивается. Более того, версия под Windows не переварит такие большие фотки.

2 мегапикселя - верхний предел для Бундлера.
1 мегапиксель - вполне оптимальный вариант.

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

А я помню autopano-sift-c из комплекта hugin очень даже неплохо искал точки на фотографиях по 10 мегапикселей.
Более того, фотки на 5 мегапикселей я обрабатывал с помощью него на компьютере с 256 Мб памяти. Тормозило, но минут за 10 штук 10 фоток вполне обрабатывало.

Правда, не уверен во-первых в том, какие пары фотографий обрабатывались (каждая с каждой или только последовательно, в bundler явно каждая с каждой), во-вторых может быть проблема в том что sift нормально работает на больших фотографиях, а bundler уже будет тормозить из-за полученных точек, например если их слишком много.

я думаю, интереснее будет строить не облако точек, а линии (ребра). Дома имеют в основном форму призм. Хотя, наверное, придется расставлять опорные линии вручную.

А как искать ребра?
Так как sift умеет только находить одинаковые точки (соответствующие одной точке в пространстве) на разных фотографиях, а bundler на основе серий двухмерных точек на фотографии, вычисляя положение фотоаппарата в пространстве, строит трехмерные, в итоге имеем только облако точек.
Можно в принципе соединять ребрами, скажем, самые ближайшие точки, затем менее близкие, но не имеющие ребер или что-то в этом духе, но для обрисовки зданий на карте это вряд ли как-то поможет (но может помочь в создании 3d-моделей).

Только сегодня думал про рёбра – тяготеют же облака точек в конце концов к линиям! И наверняка это можно автоматизировать, хоть немного.
И еще. Если бандлер даёт расчётные точки камеры, то всё это трёхмерное недоразумение можно было бы (тоже ватоматически) сажать на “попу” – на плоскость камер, если съёмка велась с уровня пола, то все камеры будут в плоскости пола (по идее). Смотреть надо будет. Не забыть.

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

Но с трёх-мегапиксельных снимков сотового (посчитал, что 5 МП это лишнее) – у меня находитель точек и 10000 видел и 20000 контрольных точек. Дело видимо не в размере)) а в количестве деталей. В первом проходе, я так понимаю, пограмма просто находит некие точки на КАЖДОМ снимке, не глядя на остальные. И только потом уже их как-то “женит”.

Еще бы выработать лучше подходы к фотанью – какую базу делать между снимками (аналог стерео). Нельзя ли к примеру проехать на машине, отснять улицу несколько км, а программа потом найдёт очертания начатков всех краёв домов по улице (и насколько камера между домами “заглянет”). Или так не получится? А лучше “топтаться” на одном месте, но во все стороны? Какова оптимальная протяжённость сцены?
Она еще же умеет вроде определять по своей посчитанной “базе” – откуда новая фотка – из этой сцены или нет? Так?
А может и стоит “копить” фотки одних и тех же мест, потихоньку отфотывая всё новые фотки с “еще более других” ракурсов? И точность сцены будет всё более расти со временем? И хранить как-то создаваемую программой папку bundle, а новыми фотками как-то “пополнять” эту “базу местности” программы, не пересчитывая ВСЕ фотки заново. а только новые…?

То есть я не хочу даже ответы на эти вопросы – так, что в голову приходило, написал. Что возможно, что нет. Что бы все подумали об смежных вещах.

Хочется познать инструмент, прежде чем применять.

Это очень неплохо работает. В том же моем посте с картинкой - вид из вагона метро. Жаль, мало нафоткал - делалось для совсем иных целей.

Построение полигональной модели по точкам задачка не тривиальная. Я одну из курсовых на эту тему делал, лучше, чем в MeshLab не получилось. Сейчас ей занимается одногруппник, если у него чо-то хорошее получится, скажу.

гугл то плоскости домов с стрит вью показывает, а нам это и надо. наверное они как-то проще это делают - у них то положение камеры известно.

Гугл использует результаты лазерного сканирования для плоскостей. На фотка гугломобиля лазерные сканеры марки SICK

Bundler для Windows со всеми необходимыми файлами можно скачать теперь отсюда:
http://osm-bundler.googlecode.com/files/bundler-v0.3-binary-win.rar

Сдаётся мне, после некоего размышления – Бандлер не наш продукт. Тут такие танцы, десятки фоток, а на выходе скромные непонятные точки в куцем количестве. А посмотрите на обычное стерео, я лично много делаю стерео-фот в анаглифе – та всего пара кадров, а видно и все рёбра, и все подробности на дальше-ближе. А бандлеру надо целую пачку, что бы выжать жалкие точки. Верю, он гораздо больше про сцену знает, но опускает эти данные, потому что его задача – найти соответствия между кадрами, как это видно из всех его рекламных роликов, и всякие там точки камеры. А требуется всего лишь искать совпадающие рёбра. И бандлер опускает эти данные, потому что он не для этого.
Нужен отдельный софт. Возможно софт будет powered by какие-то существующие продукты, например sift для нахождения ключевых точек. Или мы не умеем его готовить, но пока слишком много беганий с бубном вокруг, и возможно неоправданных.

влезу со своим вопросом в вашу высокопрофессиональную беседу :slight_smile:

если я правильно понял идет разговор о том, чтобы по фотоснимкам здания получить его 3Д модель?

если так, то

  1. насколько далеки эти разговоры от реализации и использования простыми пользователями для?
  2. фотоснимки подойдут любые? или камера обязательно должна уметь сохранять в RAW?

dedNikifor: влезание в беседу всячески приветствуется

Задача: по снимкам получить набор точек в 3D пространстве, достаточный для отрисовки контура здания на карте.

Нужны фотки в .jpg с exif информацией. Размер снимков рекомендуется уменьшить до 1 тысячи пикселей.

Каждая фотка должна перекрываться с 2 другими фотками как минимум. Процент перекрытия двух фоток должен быть около 50%.

Экспериментировать можно уже сейчас. Подробности в статье на вики: http://wiki.openstreetmap.org/wiki/Photogrammetry

Простым пользователям пока рано пользоваться.

Пример результатов работы программы Бундлер: http://img651.yfrog.com/i/90058948.png/

coolkaas:
очень даже вероятно, что реализуем возможность сопоставить точки на фотках в ручную

Можно попробовать загрузить фотки в Microsoft Photosynth. Если он с фотками что-то путное сообразил, то, возможно, и Бундлер за ним последует. Алгоритмическая основа у них одна и та же.