如何将 "im" 像素图像转换为光栅图像?

How to convert "im" pixel image to raster?

我正在尝试将我制作的“im”像素图像转换为光栅图像。 “im”是使用以下代码创建的:

library(sf)
library(spatstat)
library(rgeos)
library(raster)

# read ebird data 
ebd_species <- ("ebd_hooded.txt") %>%
  read_ebd()

# extracting coordinates 
latitude_species <- ebd_species$latitude
longitude_species <- ebd_species$longitude

#convert to spatial object
coordinates1 <- data.frame(x = longitude_species, y = latitude_species) %>% st_as_sf(coords = c("x", "y"))

# converting to point pattern data
coordinates <- as.ppp(coordinates1)

# density image
a <- density(coordinates,2)
plot(a)

这是我得到的情节: plot

我想做的是将其转换为光栅。然后我想使用 ebird 数据的坐标从栅格中提取密度值。

这是一个最小的、self-contained、可重现的例子(基于 ?im 中的第一个例子):

library(spatstat)
mat <- matrix(1:1200, nrow=30, ncol=40, byrow=TRUE)
m <- im(mat)

解决方案

library(raster)
r <- raster(m)

看来您是直接在 spatstat 中使用地理坐标(经度、纬度)。您确定这在您的上下文中可以吗?对于远离赤道的地区,这可能会产生误导。考虑使用 sf::st_transform() 投影到平面坐标(请参阅本网站上我的其他答案以获取执行此操作的代码)。此外,在较新版本的 sf 中,您可以直接从 sf 转换为 spatstat 格式,例如as.ppp().

如果您想要数据点强度的核密度估计,您可以使用 density.ppp() 中的选项 at = "points":

a <- density(coordinates, 2, at = "points")

然后 a 只是一个向量,其长度等于包含每个数据点的强度估计的点数。这默认使用“leave-one-out”估计来最小化偏差(请参阅 density.ppp 的帮助文件)。