在 R 中计算二进制光栅图像中的对象

问题描述

我有一个光栅:

r <- raster(ncol=10,nrow=10)
set.seed(0)
values(r) <- runif(ncell(r))

img1

我从栅格中选择前 10% 并更改为二进制:

r_10<-r[[1]]>=quantile(r,.90)

img2

从此子集栅格 r_10 中,所有绿色像素都具有相同的值 1。我想更改这些值,方法是将像素或像素组标识为对象并使用新 ID 标记每个新对象。新栅格应具有与此示例图像类似的值:

img3

某些对象可以有多个像素,并且它们都应该具有相同的对象 ID(例如数字 8)。

如何在 R 中编写代码?我想使用某种边缘检测或 Sobel 过滤器,但无法弄清楚。

这里有一个类似的 post,不一样,但它在 python 中,我需要在 R 中实现。

欢迎任何替代解决方案。

解决方法

我确信有多种方法可以回答这个问题(计算机视觉和 GIS)。这是针对手头问题的 GIS 解决方案(找到 here):

[9,2,3,4,5,6,8] => 2
[4,4] => 3

这是一个 shapefile 现在,但对我来说它很好。也可以随时将其转换回光栅。