我使用了R focalWeight
包中的raster
函数来为成千上万的图像创建焦点“移动窗口”权重矩阵。在几十个图像中,该函数的行为与预期不符。我期待一个3x3矩阵,但我返回了1x3矩阵。
在深入研究问题时,我认为这是由于floor
函数在内部调用。
我将在下面演示问题(我有一个名为r
的栅格)。我正在运行来自.circular.weight
res(r) # raster resolution is 1
#[1] 1 1
rs <- res(r)
d <- 1 # window diameter is 1
nx <- 1 + 2 * floor(d/rs[1]) # number of columns is 3
nx # this is expected
#[1] 3
ny <- 1 + 2 * floor(d/rs[2]) # number of rows is 1
ny # this is unexpected
#[1] 1
1 + 2 * floor(d/rs[2])
#[1] 1
2 * floor(d/rs[2])
#[1] 0
floor(d/rs[2]) # the floor of 1 is 0
#[1] 0
d/rs[2]
#[1] 1
floor(1) # but the floor of 1 should be 1
#[1] 1
res(r) == 1 # the resolution appears to be 1, 1
# [1] 1 1
res(r) == 1 # but it isn't really
# [1] TRUE FALSE
?floor
表示此前出现过这样的意外结果。它说,“通常需要使用公差。”
我如何使用公差?
如何修复focalWeight
功能?
答案 0 :(得分:0)
通过使用round
,我可以解决问题。 This answer告诉我如何处理floor
> floor(d/rs[2])
[1] 0
> floor(d/round(rs[2]))
[1] 1
这适用于我的情况,其分辨率为1.1。我不确定其他情况。