【问题标题】:Conversion point process to class image and return to same point process again将点过程转换为类图像并再次返回同一点过程
【发布时间】:2020-04-03 18:08:41
【问题描述】:

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

我尝试将 im 类中 spatstat 包中的 longleaf 数据集中存在的点过程(ppp 对象)转换为一个点过程没有成功。

在我的例子中:

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


    【解决方案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 &gt; 0 返回一个二进制值像素图像,其中条目TRUE 用于包含至少一个数据点的像素。函数where.max 查找图像达到最大值的像素中心,在这种情况下,这意味着所有TRUE 像素。查看离散化效果:

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

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

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

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,则说明问题不成立。 ppp 是一种矢量格式,表示点的坐标,精度为双精度。另一方面,im 等栅格格式和raster 包中的对象包含具有给定分辨率的点网格。因此,除非您的点在网格中完全对齐,否则您无法从 ppp 转换为“没有任何原始信息损坏”的栅格格式。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-13
        • 2013-11-20
        • 2015-01-19
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-22
        相关资源
        最近更新 更多