【问题标题】:Counting objects in binary raster image in R在R中计算二进制光栅图像中的对象
【发布时间】:2021-03-05 16:11:07
【问题描述】:

我有一个光栅:

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。我想通过将像素或像素组标识为对象并使用新 ID 标记每个新对象来更改这些值。新栅格应具有如下示例图像的值:

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

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

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

欢迎任何替代解决方案。

【问题讨论】:

  • “对象”是什么意思?所有这些绿色像素的值都是 1。当您标记它们时,顺序是否重要?例如,可以将数字 1 分配给底部像素而不是左上角的像素吗?
  • 我非常松散地使用术语“对象”。在这里,我只想将相邻像素组重新分类为不同的值。标记它们的顺序无关紧要。只要非常“对象”有自己的唯一 ID。

标签: r object-detection raster edge-detection


【解决方案1】:

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

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

# Select top 10% of highest values and convert to binary
r_10<-r[[1]]>=quantile(r,.90)
r_10[r_10==0]<-NA

# Vectorize
Vector_r_10<-rasterToPolygons(r_10)
plot(Vector_r_10)

# Add new Obj_ID class
Vector_r_10$Obj_ID<-1:nrow(Vector_r_10)

# Identify neighboring pixels
nb<-poly2nb(Vector_r_10)

# Create regions
create_regions <- function(data) {
  group <- rep(NA, length(data))
  group_val <- 0
  while(NA %in% group) {
    index <- min(which(is.na(group)))
    nb <- unlist(data[index])
    nb_value <- group[nb]
    is_na <- is.na(nb_value)
    if(sum(!is_na) != 0){
      prev_group <- nb_value[!is_na][1]
      group[index] <- prev_group
      group[nb[is_na]] <- prev_group
    } else {
      group_val <- group_val + 1
      group[index] <- group_val
      group[nb] <- group_val
    }
  }
  group
}
region<-create_regions(nb)

# Union on new regions
pol_rgn<-spCbind(Vector_r_10,region)
New_Vector_r_10<-unionSpatialPolygons(pol_rgn,region)
New_Vector_r_10<-as(New_Vector_r_10,"SpatialPolygonsDataFrame")
plot(New_Vector_r_10)

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

【讨论】:

  • 可以编辑poly2nb中的snap参数以选择适当距离的邻居。
猜你喜欢
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 2023-03-04
  • 1970-01-01
  • 2020-03-22
  • 2016-05-10
相关资源
最近更新 更多