返回与连接的2-D栅格中的点直接相邻的8个点

时间:2016-02-23 18:50:10

标签: r algorithm subset distance raster

我目前正在处理将确定光栅图像中像素连通性的代码。我目前在选择给定像素的最小距离内的所有像素时遇到问题。

这一行代码的目标是从矩阵中提取一个子集,其条目如下所示:

             jcol      icol    valcol
300   0.005076142 0.8860759 0.0000000
27077 0.862944162 0.2911392 0.0000000
30604 0.974619289 0.4746835 0.0000000
3138  0.096446701 0.7341772 0.0000000
9926  0.314720812 0.4240506 0.0000000
27328 0.868020305 0.8734177 0.0000000
17624 0.558375635 0.8417722 0.0000000
13117 0.416243655 0.4936709 0.0000000
22622 0.720812183 0.2721519 0.6509804
15720 0.497461929 0.8670886 0.0000000

这里jcol是相对y位置,icol是相对x位置,valcol是像素(x,y)处栅格的值。该矩阵覆盖整个栅格。

目前我正在尝试使用subset函数来执行此任务:

P_N = subset(cluster.matrix, abs(cluster.matrix[,1]-x_N[,1]) == xthresh | abs(cluster.matrix[,2]-x_N[,2]) == ythresh)

xhtreshythresh表示样本点x_N周围的距离,从原始点(下面的示例)中选择一个点:

     jcol      icol    valcol 
3099    1 0.6518987 0.4862745

问题是我得到P_N的以下输出:

[1] jcol     icol     valcol
<0 rows> (or 0-length row.names)

理想情况下,P_N会返回与x_N

直接相邻的8个点

我认为我在子集函数中的语法是错误的,特别是因为x_N是1x4数据条目,而cluster.matrix是~7000x4矩阵。

1 个答案:

答案 0 :(得分:2)

我想你想要raster::adjacent

library(raster)
r <- raster(matrix(runif(100), 10))
cells <- adjacent(r, 34, 8, pairs=FALSE)
adj <- cbind(xyFromCell(r, cells), value=extract(r, cells))

在上面,adjacent返回与光栅r的单元格34相邻的8个单元格的单元格编号。您还可以传递可能从距离矩阵/栅格派生的邻域矩阵 - 请参阅directions处的参数?adjacent的帮助。

然后,我们使用xyFromCell提取x和y坐标,使用extract提取单元格值(或者我们可以使用r[cells])。