将点过程转换为class图像并再次将return转换为相同的点过程

Conversion point process to class image and return to same point process again

我想在 spatstatraster 世界之间进行翻译,而不会损坏任何原始信息。

我尝试转换 im class 中 spatstat 包中 longleaf 数据集中存在的点过程(ppp 对象),然后我尝试转换im class 原始长叶数据集中的对象作为点处理没有成功。

在我的例子中:

#<start> ---
library(spatstat)
library(raster)
library(maptools)

# Compute a gaussian kernel smoothed intensity with longleaf data set
bw <- bw.diggle(longleaf) #First, defined bandwidth sigma 
im_census<-density.ppp(longleaf, sigma=bw,diggle=TRUE)

# Now I'll try to convert im im_census object in original longleaf Point Pattern ppp again
im_census_p<-rasterToPoints(raster(as.SpatialGridDataFrame.im(im_census)))

par(mfrow=c(1,2))
plot(longleaf)
plot(im_census_p)
#<end> ---

但是明明不行? 有人可以帮我吗?

如果我对你的问题的理解是正确的,那就是病态的。 ppp 是一种矢量格式,表示点的坐标,精度为双精度。另一方面,im 等栅格格式和 raster 包中的对象包含具有某些给定分辨率的点网格。因此,除非您的点在网格中完全对齐,否则您从 ppp 转换为栅格格式 "without any original information damage" 的任务是不可能的。

如果你想要一个 ppp 的栅格近似值,你可以在 spatstat 中使用 pixellate,它会生成一个网格并计算每个网格单元中有多少点(通常为 0 或1).

spatstat中,类之间的转换通常由名称以"as"开头的函数执行。要将 ppp 转换为 im,您可以使用 as.im。泛型 as.im 分派到调用 pixellate 的方法 as.im.ppp。示例:

X <- cells # or any point pattern
Z <- as.im(X)
plot(Z)
plot(X, add=TRUE)

在生成的图像Z中,每个像素的值是落在该像素中的数据点的数量。数据点的精确坐标丢失。

要将im转换成ppp没有as.ppp.im的方法,因为这种操作一般来说是没有意义的。但是假设图像 Z 是通过像素化点图案生成的,您可以

P <- where.max(Z > 0, first=FALSE)

那么P就是一个点阵图。操作 Z > 0 returns 具有条目 TRUE 的二进制值像素图像,用于包含至少一个数据点的像素。函数 where.max 找到图像达到最大值的像素中心,在本例中,这意味着所有 TRUE 像素。查看离散化效果:

plot(X)
plot(P, add=TRUE, pch=3)

PX 类似,只是数据点的确切位置已被最近像素中心的位置所取代。落在单个像素中的多个数据点被像素中心的单个点替换。

对于更复杂的操作,您可以使用 as.data.frameim 对象转换为数据框,每个像素一行,列 xy, value.然后操作这个数据框,最后使用 as.ppp 从结果数据框中制作一个点模式。