R 中的栅格:在目标周围邻域中创建像素

raster in R: Create pixels in a target surronding neighborhood

在我的例子中:

#Packages
library(spatstat)
library(raster)

#Selection of ants data set
data(ants)
geo.form<-cbind(x=ants$x,y=ants$y)

#Definition of raster resolution - 10 units
ants.w<-as.owin(ants)
ext <- as(extent(c(ants.w$xrange,ants.w$yrange)), "SpatialPolygons")
ants.res<-rasterToPoints(raster(ext, resolution = 10), spatial = TRUE)
coordinates(ants.res) <- ~ x + y
# coerce to SpatialPixelsDataFrame
gridded(ants.res) <- TRUE

#Rasterize
antscount<- rasterize(geo.form, raster(ants.res), fun='count', background=0)
values(antscount)[values(antscount) > 0] = 1

#Vizualize
plot(antscount)

现在,我想找到任何方法来围绕绘图图像中每个像素(蚂蚁)的邻域创建 1 个(总共 9 个像素)和 2 个像素(总共 25 个像素)。我需要这个新创建的像素也有 1 作为值。

邻域像素的选择听起来很简单,就像:

# For 1 pixel neighborhood
neigh1 <- matrix(1L, nrow=3, ncol=3); neigh1[2,2] <- 0L
ants1<-which(values(antscount)> 0)
cells<- xyFromCell(antscount, ants1)
e1<-adjacent(antscount, cells, directions=neigh1, pairs=FALSE)
ng_coords1 <- xyFromCell(antscount, e1)

# For 2 pixel neighborhood
neigh2 <- matrix(1L, nrow=5, ncol=5); neigh1[3,3] <- 0L
e2<-adjacent(antscount, cells , directions=neigh2, pairs=FALSE)
ng_coords5 <- xyFromCell(antscount, e2)

问题是我的 ng_coords1/ng_coords5 坐标是错误的,并且只在 antscount 栅格的顶部,尽管有 xyFromCell(antscount, ants1) 条件。我的目标是一个新的蚂蚁存在栅格,在原始 antscount 栅格中每个像素(蚂蚁)的邻域周围有 8 和 24 个像素。请问,有什么想法吗?

#Packages
library(spatstat)
library(raster)

#Selection of ants data set
data(ants)
geo.form<-cbind(x=ants$x,y=ants$y)

#Definition of raster resolution - 10 units
ants.w<-as.owin(ants)
ext <- as(extent(c(ants.w$xrange,ants.w$yrange)), "SpatialPolygons")
ants.res<-rasterToPoints(raster(ext, resolution = 10), spatial = TRUE)
# coerce to SpatialPixelsDataFrame
gridded(ants.res) <- TRUE

#Rasterize
antscount<- rasterize(geo.form, raster(ants.res), fun='count', background=0)
values(antscount)[values(antscount) > 0] = 1

#Vizualize
plot(antscount)

# For 1 pixel neighborhood
neigh1 <- matrix(1L, nrow=3, ncol=3); neigh1[2,2] <- 0L
ants1<-which(values(antscount)> 0)
cells <- unique(cellFromXY(antscount, geo.form))
e1<-adjacent(antscount, cells, directions=neigh1, pairs=FALSE)
ng_coords1 <- xyFromCell(antscount, e1)
points(ng_coords1, col="red")

#Rasterize for 1 pixel neighborhood
ng_coords2<-rbind(ng_coords1,geo.form)
antscount.9<- rasterize(ng_coords2, raster(ants.res), fun='count', background=0)
values(antscount.9)[values(antscount.9) > 0] = 1
plot(antscount.9)

最好使用 focal

示例数据(注意更简单的代码)

library(spatstat)
library(raster)
data(ants)
geo.form <- cbind(x=ants$x, y=ants$y)
ants.w <- as.owin(ants)
ext <- extent(c(ants.w$xrange, ants.w$yrange))
r <- raster(ext, resolution=10)
antscount<- rasterize(geo.form, r, field=1, background=0)

解决方案

# direct neighbors
x <- focal(antscount, w=matrix(1, ncol=3, nrow=3), fun=max, pad=TRUE, padValue=0)
# 2 cell neighborhood    
y <- focal(antscount, w=matrix(1, ncol=5, nrow=5), fun=max, pad=TRUE, padValue=0)