我目前正在研究的代码将决定像素在光栅图像中的连接性。我目前有一个问题,选择所有像素在一个给定像素的最小距离。
这行代码的目标是从矩阵中提取一个子集,其条目如下所示:

             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个点。
我认为我在subset函数中的语法是错误的,特别是因为x_N是一个1x4数据项,而cluster.matrix是一个~7000x4矩阵。

最佳答案

我想你想要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])。

关于r - 返回与所连接的二维栅格中的点直接相邻的8个点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35585745/

10-12 23:25