我试图通过显示网格中每个像素的交叉次数来传达 2D 空间中线条的集中度。我正在描绘类似于密度图的东西,但单位更直观。我被 spatstat 包及其线段类 (psp) 所吸引,因为它允许您通过端点定义线段并将整条线合并到计算中。但是,我正在努力寻找正确的功能组合来计算这些数量,并希望得到任何建议。
如下面的 50 行示例所示,密度函数生成 (0,140) 中的值,pixellate 函数计算每个像素的总长度并获取 (0, 0.04) 中的值,as.mask 生成是否一条线穿过每个像素。我希望看到比例取整数值的东西,比如 0..10。
require(spatstat)
set.seed(1234)
numLines = 50
# define line segments
L = psp(runif(numLines),runif(numLines),runif(numLines),runif(numLines), window=owin())
# image with 2-dimensional kernel density estimate
D = density.psp(L, sigma=0.03)
# image with total length of lines through each pixel
P = pixellate.psp(L)
# binary mask giving whether a line went through a pixel
B = as.mask.psp(L)
par(mfrow=c(2,2), mar=c(2,2,2,2))
plot(L, main="L")
plot(D, main="density.psp(L)")
plot(P, main="pixellate.psp(L)")
plot(B, main="as.mask.psp(L)")
pixellate.psp 函数允许您有选择地指定要在计算中使用的权重。我考虑尝试对其进行操作以标准化像素以对每个交叉点进行计数,但权重仅应用于每条线(而不是特定于线/像素对)。我还考虑过为每一行计算一个二进制掩码并添加结果,但似乎应该有一种更简单的方法。我知道您可以沿一条线对点进行采样,然后按像素对点进行计数。但是,我担心要正确采样,以便每个像素的线交叉只有一个点。
在 R 中是否有一种直接的方法可以做到这一点?否则,这是否是对未来软件包增强的适当建议?这是否更容易用另一种语言(如 python 或 matlab)完成?
上面的示例和我的测试是在 x86_64-w64-mingw32 上使用 spatstat 1.40-0、R 3.1.2。