我目前正在处理将确定光栅图像中像素连通性的代码。我目前在选择给定像素的最小距离内的所有像素时遇到问题。
这一行代码的目标是从矩阵中提取一个子集,其条目如下所示:
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
我认为我在子集函数中的语法是错误的,特别是因为x_N是1x4数据条目,而cluster.matrix是~7000x4矩阵。
答案 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]
)。