Советы по методам распознавания суши / морской массы на картах Google - PullRequest
1 голос
/ 03 февраля 2011

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

Я немногоновичка в области компьютерного зрения и машинного обучения, поэтому я ищу несколько советов по конкретным методам или API, которые могут быть полезны (я не ищу код для этого решения).

Какие у меня есть некоторыепока что:

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

Любая помощь, конечно, очень ценится.

РЕДАКТИРОВАТЬ (для тех, кто может захотеть сделать что-то подобное):

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

Я предполагаю, что вы используете изображения со спутника Google Maps, иначе вы не написали бы о кораблях или других артефактах.

Как вы уже сказали, было бы неплохо просто попытаться извлечьсиняя часть изображения.Просто смотреть на синий канал изображения RGB не сработает (я только что попробовал), поскольку лес и т. Д. Не дадут хорошего порогового значения для воды.

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

Это пример, который я только что сделал со скриншотом из карт Google.Я преобразовал его в YCbCr в Matlab и просто взял канал Cb.

original screenshot

cb channel of ycbcr image

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

Надеюсь, это поможет ... если нет, пожалуйста, продолжайте спрашивать ...

РЕДАКТИРОВАТЬ

Я только что попробовал еще раз с другим снимком экрана в matlab:

  1. Преобразование изображения в цветовое пространство YCbCr
  2. Просто взгляните на канал Cb
  3. найти порог на изображении Cb либо фиксированным, либо с помощью метода Оцу, который находит соответствующий порог в двудольной гистограмме
  4. выполняет открытие или другие фильтры для устранения небольших шумов

исходное изображение, которое я сделал:

screenshot

После применения порога к изображению Cb: after applying threshold

После применения отверстия (5) к изображению final image

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

1 голос
/ 03 февраля 2011

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

  1. определить порог t
  2. , если pixel value> t -> назначить пиксель для земли
  3. elseназначить пиксель морю (обычно у вас будет растровое изображение, в котором вы будете отслеживать класс пикселей)

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

...