Распознавание водных путей на аэрофотоснимках - полигоны из изображений с обнаружением краев


9

Я пытаюсь распознать водные пути по аэрофотоснимкам (скажем, из Google Maps). Местные органы власти часто располагают данными ГИС, в которых указано, где находятся водные пути (и дороги, здания и т. Д.), Но данные о них в воде часто несколько неточны, и мы могли бы улучшить их, используя аэрофотоснимки. Итак, у нас уже есть данные, которым не всегда можно доверять.

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

  • Я могу собрать некоторый набор значений цвета, используя кусочки водного пути на изображениях, и выяснить, какие пиксели ближе всего к этим цветам, возможно, также для других типов объектов (трава, дороги, здания и т. Д.). Если я установлю порог, на котором пиксели «достаточно близки», я получу набор пикселей, которые, вероятно, являются водными путями (но будет много шума).

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

В качестве результата я хочу получить набор полигонов , очерчивающих вероятные водные пути.

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

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


1
Sidenote: Имейте в виду, что лицензия Google не позволяет это делать! Openstreetmap имеет ту же проблему . OSM имеет соглашение об использовании образов Bing.
PiTheNumber

Ответы:


6

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.