我目前正在研究的代码将决定像素在光栅图像中的连接性。我目前有一个问题,选择所有像素在一个给定像素的最小距离。
这行代码的目标是从矩阵中提取一个子集,其条目如下所示:
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)
其中
xhtresh
和ythresh
表示样本点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/