Городское картирование — пост-обработка результатов

GeoAlert
3 min readFeb 17, 2020

В работе картографа есть масса инструментов, которые помогают ускорить процесс. Такие инструменты встроены в ГИС — рисование геометрических примитивов (точка, полигон и т.д.), валидация и процессинг данных с помощью таких алгоритмов как симплификация, сглаживание контуров, примагничивание (как лучше перевести snapping? :) и т.д.

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

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

После постобработки с примененим алгоритмов полигонизации — визуальный результат уже намного лучше.

До и после обработки с полигонизацией контуров

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

Вот некоторые примеры алгоритмов валидации, применяемых на этапах пост-обработки данных:

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

Есть и менее очевидные правила, которые можно применять в цепочке обработки:

  • загрузить объекты из Openstreetmap — с помощью этой опции можно выбрать полигоны зданий из OSM и сопоставить их с автоматическими полигонами. Выставляя порог соответствия по площади (известный как метрика Жаккара или IOU — отношение площади пересечения двух сравниваемых полигонов к площади их объединения), возможно оценивать качество работы модели на конкретной территории или производить замену автоматических полигонов

Все эти шаги в настоящее время управляются на уровне платформы Geoalert с помощью длинной простыни настроек, как-то так:

    -   _step: FilterSmallObjects
input: buildings
min_area: 30.0
output: buildings_filtered
- _step: RemoveSmallHoles
input: buildings_filtered
min_hole_area: 50.0
output: buildings_filtered_fixed
- _step: LoadOSMBuildings
input: buildings_filtered_fixed
output: osm
- _step: MergeByReplace
input: buildings_filtered_fixed_with_osm
min_iou: 0.8

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

Выравнивание зданий вдоль дорог

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

  • Взять полигоны зданий
  • Взять линии дорог из OSM
  • Определить среднее отклонение поворотов внутри кластера зданий— по отношению к линии дороги и по отношению к другим зданиям в кластере
  • В случае если среднее отклонение больше определенного порога (устанавливается в настройках) — переориентировать все такие здания под прямым углом к ближайшей дороге
  • Устранить наложения зданий, если возникли

Безусловно, это неидеальный алгоритм, который также может добавлять ошибки поворота, а не только устранять их. Применение таких алгоритмов это всегда поиск баланса. На тестовых участках мы оценили его работу как в среднем уменьшающую ошибку поворота (~ c 5.3 градусов до 1.8). Пока что мы тестировали на прямоугольных формах зданий, однако сам алгоритм уже работает и для зданий Г-образной формы (на английском мы назвали такие здания L-shape buildings). А значит количество работы картографов по валидации и исправлению контуров еще уменьшится.

Не забудьте подписаться на наши новости про проекты и разработку платформы

--

--

GeoAlert

We apply Machine learning to automated analysis over Earth observation data