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

Такс. По поводу SIFT`а. Сифт - это лишь алгоритм, который находит “особые” точки на изображении. Помимо него есть еще куча других алгоритмов. Мне больше всего понравился SURF - он во-первых более “свободный”, да еще и более быстрый. Только чтобы его с бандлером подружить, придется потрудиться…
Восстановление 3Д по точкам. Это возможно! :slight_smile: Patch-based Multi-view Stereo Software. В пакете с бандлером идет программка Bundle2PMVS, которая умеет готовить файлики для этого PMVS. На сайте есть две версии - первая и вторая. Вторую я так и не осилил, а первая же, оказалась довольно послушной и даже выходило что-то, отдаленное напоминающее оригинальный предмет…

С нетерпением ждем вестей с полей :slight_smile:
И скринов.

  1. Весьма пока далеки,
  2. РАВ как раз противопоказан, только jpg
  3. Снимать кадры надо не просто со смещением (и наложением краёв 50%) а с разных точек, это самое главное.

А то если снимать с одной точки, получится классическая “плоская” панорама – программа (как Бандлер, так и Фотосинт) найдут на “общей” картинке положения фоток, но объёмной картинки совершенно не получится. Это всё равно, что зафиксировать голову и смотреть одним глазом – стерео не будет, ни человек, ни программа объёма не увидят и никаких “форм” не получится. (человек “знает” объекты и одним глазом сможет прикинуть перспективу известных объектов и расстояние до них, но мы это сейчас в расчёт не берём, конечно же).

Технология пока зачаточна, в общем. Не вообще, а в этой теме, и в нашем применении.

ps. Пощупал АкМеРов pmvs… не осилил)) черепушка делается, на этом всё. Как калибровать камеру так и не понял. И вообще, какая программа за что отвечает. В общем, жду АкМеРа с подробнейшим howto)) Но продукция получается более многообещающая и более шустрая, судя по пощупу.

Переписаны скрипты на Питоне. Подробности на OSM-вики: http://wiki.openstreetmap.org/wiki/Photogrammetry
Большого прорыва пока нет.
Основные изменения:

  1. Используется по умолчанию реализация алгоритма SIFT с открытым кодом. Закрытая версия от David Lowe также может использоваться
  2. Нет больше проблем с пробелами в пути к фотографиям
  3. Копии фотографий автоматически приводятся к меньшему размеру, если исходный размер фотографии превышает некоторый порог (по умолчанию 1200 пикселей)

Напомню, вертикальное направление для восстановленной 3D-сцены не восстанавливается. Прошу высказать идеи, как можно восстановить вертикальное направление. 3D-сцена в нашем случае будет в большинстве ситуаций состоять из зданий.

Пощупал я bundler, но что-то вменяемых результатов не добился (наверное я не умею его готовить). Вообще, думаю, что применение если он и найдёт какое для картографирования, то оно будет весьма ограниченным. Главный недостаток данного метода тот же, что и достоинство - это его полный автоматизм. Похожие точки на снимках ищутся автоматическим алгоритмом (SIFT там, SURF, неважно), который в реальности работает не очень хорошо, и главное - совершенно не делает различия между точками на интересующем нас объекте и всякими ненужными (кусты, облака в небе и т.д.) У нас же большинство зданий так или иначе стоит за деревьями - в итоге, получается, с разных ракурсов одна и та же часть здания становится по-разному закрыта ветками и общих точек алгоритм там не найдёт (в лучшем случае найдёт общие точки на загораживающем дереве).

Вот если б можно было вручную отметить точки, рёбра и т.д. на разных фото, а затем уже дать программе всё рассчитать - думаю результат был бы более вменяем. Увы, как я понимаю, подобных программ сейчас нет. (на Canoma я поглядел, но это не совсем то - там предлагается крутить и приляпывать друг к дружке вручную 3D-примитивы, пока оно не станет похоже на исходные фото - т.е. по сути практически полностью ручная работа)

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

P.S. Только я не проверял в каких форматах хранятся найденные для изображений общие точки в бандлере и птгуе так что с уверенность сказать что удастся из птГуи править точки бандлера не могу.

Еще есть Hugin, формат там тривиальный текстовый.

Поясню, какие этапы проходит Бундлер при обработке набора фотографий.

  1. Нахождение точек. Сейчас это автоматический алгоритм SIFT (вероятно добавится также SURF). Точки можно задать и вручную.

  2. Нахождение соответствий между точками и фотографиями, т.е. точка A на фотографии P1.jpg соответствует точке B на фотографии P2.jpg. Сейчас используется автоматический метод, созданный разработчиком Бундлера. Однако соответствие точек можно указать и вручную. Именно от этого этапа зависит, насколько в итоге качественно будет восстановлена 3D-сцена.

  3. Вычисление положений точек и камер в пространстве по результатам этапа 2). Если на этот этап подать качественно сопоставленные точки, то получится хорошо восстановленная 3D сцена с правильно определенными положениями камер.

Итак, успех всей работы Бундлера кроется в этапе 2). Сейчас определяемся, в каком направлении двигаться дальше: или реализовать инструмент для ручного сопоставления набора точек (примерно так, как это делается в Hugin), или попытаться улучшить автоматическое сопоставление.

Вот я к тому, что если бандлер найденные на этапе 1 как то сохраняет (может во все тот же текстовый файлик) то можно прикрутить (Hugin или ptGui для ручного редактирования точек) я не пользовался бандлером, просто я такпонял что высказавшимся неудобно ставить соответсвие точек в бандлере вручную.

Да, используемые в Бундлере программы по нахождению точек на фотографии сохраняют результаты в текстовом файле с простым форматом. Реализация алгоритма SIFT с открытым кодом из библиотеки VLFeat дает 10-20 тысяч точек. Реализация алгоритма SIFT с закрытым кодом от David Lowe дает около 5 тысяч точек.

Если возможность загрузить в Hugin файл с точками для проставления ручного соответствия точек между фотографиями?

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

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

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

вот была книжка такая http://www.uic.unn.ru/~egyb/horn.html там немного похожие вопросы рассматривались.

Проверить можно так: запускаем ГугльЁрс, поднимаем местность в 3Д, облетаем несложный хребет как на вертолете, делаем фоток 20-30, не меньше. Заправляем их в бандлер, смотрим на результат. Ругаемся :slight_smile: и понимаем, что реально снять много фот, в одно время, да что бы они подошли бандлеру почти не реально без вертолета.

А зачем опознавание рельефа гор, когда в открутом доступе есть данные по рельефу с весьма неплохой точностью с шагом в десятки метров?

У SRTM разрешение около 100м. Не всем может хватить… А на севере Уральских гор SRTM вообще нет и там у открытых источников разрешение ещё ниже…