Рисование леса и других однородных полигонов - скрипт JOSM+python

Скан-то нормальный, проблема-то в том, что плагин “закозявило” на этом поле…

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

Цитата:
limiting the area would not help much. The script needs to detect the borders and i dont think that it will be ever possible to detekt grainfields, grassland and the like.
I had very good results in scanning the lakes in sibiria (you can find many examples around Anadyr). These lakes have a contour with very high contrast.
There are many promising ideas to improve scanaerial, but i have no time in near future to code them.

progserega Поставил, у меня Python нагружает всего одно ядро процессора из 4х. Вот и не спешность в работе.

Посмотрел scanaerial.cfg там в секции WMS настройки для Bing, а что нужно для космоснимков прописать?

Разобрался:
там надо исправить
wmsname = IRS
wms_server_url = http://irs.gis-lab.info/?layers=irs&

Может быть кому-то будет интересно.

На днях я реализовал еще один плагин для обводки лесов и прочего, работает аналогично Scanaerial, но с некоторыми отличиями.

Во-первых он написан на Java как обычный плагин, в силу чего:

  • Никаких дополнительных зависимостей, кидаем джарку в plugins и включаем в настройках, в меню появляется новый пункт
  • Сканирование производится по кешу первого видимого Imagery слоя JOSM, поддерживается TMS/Scanex/Bing - то есть снимки повторно с сервера не выкачиваются
  • Учитывается смещение снимков
  • По моим ощущения работает быстрее

Отличия в схеме работы, возможно будут меняться:

  • Картинка прогоняется через медианный фильтр (размер - vectorizer.image.filter.median.size, 0 - отключить фильтр)
  • Для определения цвета используется не сфера в пространстве RGB, а эллипсоид, определяемый на основе распределения цветов окрестности начальной точки заданного размера (размер окрестности - vectorizer.color.area.size, по умолчанию 3 - это значит что не стоит кликать ближе чем на 3 пикселя к краю, если надо выделять маленькие области - можно уменьшить). Радиус эллипсоида по каждой из осей определяется как (3*среднеквадратичное отклонение) и дополнительно увеличивается на vectorizer.color.ellipsoid.expand

JAR: https://github.com/downloads/alno/josm-vectorizer/vectorizer.jar
Исходники: https://github.com/alno/josm-vectorizer

Тестировал только на IRS и Bing.
Из известных багов - может падать, если выделяется область вблизи смены уровня максимального зума снимков.

P.S. Кое-где в коде пришлось копировать куски из ядра JOSM в силу того, что они в ядре плохо доступны:

  • Преобразование координат тайлов в lat/lon из слоев - почему-то там поддерживаются исключительно целые координаты, хотя формула вполне допускает дробные, и обратная формула также выдает дробные.
  • Douglas-Peucker почему-то protected внутри команды упрощения, пришлось скопировать.

Классная штука! Ещё бы научилась сама докачивать снимки если лес распространяется на не загруженную область.

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

А этот алгоритм будет работать для png с уже “готовой” RGB палитрой из, скажем, 10 цветов ?

Из-за использование палитры проблем не должно быть, потому что цвет берется не напрямую из растра, а из BufferedImage, которая осуществляет преобразование и возвращает RGB.

Единственная проблема, которая мне видится - если цветов будет мало, то много могут оказаться за рамками 3*sigma и будут дырки в полигоне - тогда надо увеличить значение параметра vectorizer.color.ellipsoid.expand.

Вообще этот эллипсоид может быть сведен к стандартной сфере с заданным радиусом, если поставить vectorizer.color.area.size=0 - тогда не учитывается никаких пикселей кроме центрального, начальные радиусы очевидно становятся равными 0 (эллипсоид вырождается в точку), и тогда vectorizer.color.ellipsoid.expand означает радиус.

Если есть примеры такого слоя - скажите, интересно будет потестить.

Растеризованный генплан, который был изначально векторным (как вариант, jpeg
преобразуется в png только с цветами стиля векторизации с помощью gimp или imagemagick. Совсем глупый пример - карта созданная mapnik).
Импортируется в piclayer, либо просто используется WMS.

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

А что это за участок именно? Какие координаты? Хочу посмотреть как именно перескакивает, возможно такие случаи можно решить более тонкой [авто]настройкой фильтра.

http://osm.org/go/2Nl~PN_N-

Отлично! Продвинутый java-плагин-векторизатор давно напрашивался, но достаточно сил и времени ни у кого не было…
Главное - не останавливаться на достигнутом.

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

И ещё моя мечта - полуручная векторизация (типа магнитного лассо в фотошопе), что бы вести мышкой вблизи границы, а плагин находил и рисовал эту границу…

Ядро можно поменять, легко. Скажите, где :slight_smile:

Кинул vectorizer.jar в \plugins, в списке плагинов не видно.

Лучше как в гимпе - умные ножницы, результат можно поправить, продуманней как то в целом.

А плагин рабочий еще или нет ? Захотелось попробовать - JOSM его выключает, ссылки на вики устарели…

(updated)
Рабочий :slight_smile:
http://forum.openstreetmap.org/viewtopic.php?pid=210917#p210917

Апну тему непраздным вопросом.

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

В связи с этим тестирую плагин Scanaerial. Беру ярко выраженный кусок леса - здесь https://www.openstreetmap.org/edit#map=15/51.2810/136.5830 он относительно хорошо виден на снимке Bing.
Не могу никак добиться желаемого результата, играюсь с конфигом, масштабом и начальной точкой запуска алгоритма.

Прошу помощи, если у кого получится заставить плагин отрисовать этот кусок леса без залезания на реку и без огромного количества микродырок. В результате хотел бы дополнить документацию плагина (https://github.com/jonasstein/scanaerial/tree/master/doc) примерами конфига со скриншотами.

В этой теме: Мапить леса, метод хоть и более хитровыдуманный, но подуктивние.

С тех пор появились несколько более годные способы http://gis-lab.info/qa/qgis-sacp-sentinel2a.html
Полуавтоматическая классификация, автоматическое скачивание данных Sentinel.
Правда, требуется QGIS. Но для какой более-менее серьезной работы с пространственными данными не нужна ГИС?

Ярко выражен этот кусок только для человека.
Если смотреть так, как этот снимок видит алгоритм, то можно заметить по средине облако, увидеть что светло-зелёный цвет леса похож на цвет травы, а тёмно-зелёный - на цвет воды. При всём этом, часть леса - темнее, часть - светлее.
Аналогом “волшебной палочки” фотошопа (а именно так работает scanaerial) это место не обработать.