У меня есть растр:
r <- raster(ncol=10, nrow=10)
set.seed(0)
values(r) <- runif(ncell(r))
Из растра я выбираю верхние 10% и меняю на двоичный:
r_10<-r[[1]]>=quantile(r,.90)
В этом подмножестве растра r_10
все зеленые пиксели имеют одинаковое значение 1. Я хотел бы изменить эти значения, идентифицировав пиксели или группы пикселей как объекты и пометив каждый новый объект новым идентификатором. Новый растр должен иметь значения, подобные этому примеру изображения:
Некоторые объекты могут иметь несколько пикселей, и все они должны иметь один и тот же идентификатор объекта (например, номер 8).
Как я могу запрограммировать это в R? Я думал использовать какое-то обнаружение краев или фильтр Собеля, но не могу понять.
Вот аналогичное сообщение, не то же самое, но на Python, и мне нужно чтобы реализовать это в R.
Приветствуются любые альтернативные решения.
что это значит под объектами? Все эти зеленые пиксели имеют значение 1. Когда вы их маркируете, имеет ли значение порядок? Например, можно ли присвоить цифру 1 нижнему пикселю вместо верхнего левого? — person kjtheron schedule 05.03.2021
Я использую термин объект очень свободно. Здесь я просто хочу переклассифицировать группы соседних пикселей на разные значения. Порядок их маркировки значения не имеет. Пока у самого объекта есть свой уникальный ID. — person kjtheron schedule 05.03.2021
Я уверен, что есть несколько способов ответить на этот вопрос (компьютерное зрение и ГИС). Вот ГИС-решение (найдено здесь) для рассматриваемой проблемы:
Сейчас это шейп-файл, но для моих целей он подходит. Это всегда можно преобразовать обратно в растр.
Можно отредактировать параметр
snap
вpoly2nb
, чтобы выбрать соседей на соответствующих расстояниях. — person kjtheron; 06.03.2021