【发布时间】:2016-02-23 18:50:10
【问题描述】:
我目前正在研究确定光栅图像中像素连接性的代码。我目前在选择给定像素的最小距离内的所有像素时遇到问题。
这行代码的目标是从矩阵中提取一个子集,其条目如下所示:
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 个点
我认为我在子集函数中的语法是错误的,特别是因为 x_N 是一个 1x4 数据条目,而 cluster.matrix 是一个 ~7000x4 矩阵。
【问题讨论】:
-
可能
raster::clump(see e.g. here) 帮助您解决更大的问题,关于光栅中像素的连接性? -
我建议您将“==”符号替换为“
-
在
clump的行中,另请参阅this gist,您可以为其指定邻域距离(ping @JoshO'Brien)。 -
@jbaums 我找到了一个修复程序,并在my own fork of that gist 中进行了编辑。 (基本上避免了我遇到的错误,我需要通过添加以下行来以几种方式完善
pypath:pypath <- tools::file_path_sans_ext(normalizePath(pypath))。不过,我并不真正熟悉 gists 的工作原理。有什么方法你可以将该修复和 Pakillo 合并到您的原始要点中吗? -
@jbaums 嗨,约翰。是的,我就是这么用的。 (我通过首先打开 OSGeo4W 并弄清楚它想要什么命令然后从那里返回来调试
polygonizer()。事实上,至少在我的机器上,只需执行pypath <- "gdal_polygonize"就可以了。我有点期待它也可以在其他安装了 OSGeo4W64 的 Windows 机器上执行此操作,尽管在Sys.which()的搜索路径上查找它似乎没有太大的危害。)再次感谢您向我指出这些要点!
标签: r algorithm subset distance raster