将点转换为类图像并再次返回同一点的过程

问题描述 投票:0回答:2

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

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

在我的示例中:

#<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> ---

但是显然这行不通吗?有人可以帮我吗?

r raster r-raster spatstat
2个回答
0
投票

如果我正确理解了您的问题,那是病态。 ppp是一种矢量格式,代表双精度精度的点的坐标。另一方面,栅格格式(例如im和来自raster包的对象)包含具有给定分辨率的点网格。因此,除非您的点在网格中完美对齐,否则从ppp转换为“没有任何原始信息损坏”的栅格格式的任务是不可能的。

如果要ppp的栅格近似值,可以在pixellate中使用spatstat,这将构成一个网格并计算每个网格像元中有多少点落入(通常为0或1)。


0
投票

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

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返回带有条目TRUE的二进制值的像素图像。函数where.max查找图像达到最大值的像素中心,在这种情况下,这意味着所有TRUE像素。要查看离散化效果:

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

PX相似,除了数据点的确切位置已由最近的像素中心的位置代替。落在单个像素中的多个数据点将替换为像素中心的单个点。

对于更复杂的操作,您可以使用as.data.frameim对象转换为数据帧,每个像素一行,列xyvalue。然后操作该数据帧,最后使用as.ppp从所得数据帧中绘制出点图案。

© www.soinside.com 2019 - 2024. All rights reserved.