【问题标题】:R filter raster using focal() with threshold - defining correct function使用具有阈值的焦点()的 R 过滤栅格 - 定义正确的函数
【发布时间】:2015-01-19 10:57:23
【问题描述】:

我有为我的任务定义正确功能的问题。为了过滤图像,我设置了一个过滤矩阵 eucdis 与

library(rgdal)
library(raster)
refm=matrix(1,nrow=11,ncol=11)
M = dim(refm)[1]

N = dim(refm)[2]

eucdis = matrix(NaN, nrow=11, ncol=11)
for (i in -5:5){
      for (j in -5:5){
            eucdis[i+6,j+6] = 2*(sqrt(sum(abs(0-i)^2+abs(0-j)^2))) #euclidean distance of the moving matrix
            eucdis[6,6]=1
            eucdis[eucdis>10]=0
            eucdis[eucdis>0]=1
      }
}

使用示例栅格

f <- system.file("external/test.grd", package="raster")
f
r <- raster(f)

我想过滤该栅格中具有特定值的所有值,例如移动 eucdis 过滤器矩阵的 10% (=8) 内的 200

s=focal(x=r,w=eucdis,fun=function(w) {if (length(w[w==1])>=8) {s=1} else {s=0}})

但这只会给我所有值,其中 eucdis 过滤器矩阵至少有 8 个像素且任何值 r。如果我添加关于 r[r&gt;=200] 的约束,它不会像我想象的那样工作。它没有考虑第二个约束。

s=focal(x=r,w=eucdis,fun=function(w,x) {
           if (length(w[w==1])>=8 | x[x>=200]){s=1} else {s=0}}) 
# I also tried & and &&

如果有人可以帮助我,请。我已经花了好几天了,无法弄清楚我自己。

谢谢,

安妮

【问题讨论】:

  • 您能否解释一下“10% 以内的 200 (=8)”是什么意思?
  • 很抱歉,这里没有写清楚。栅格值 200 或更大应为约束,该值应对该移动矩阵的至少 8 个像素有效。如果这是有效的,则中心像素设置为 1。如果不满足这些约束,中心像素应为 0

标签: r filter raster threshold


【解决方案1】:

传递给focal 的函数不引用权重矩阵。相反,它指的是位于移动窗口内的r 的单元格(这些单元格对函数返回值的相对贡献由权重矩阵控制)。因此,在您使用 function(w) {if (length(w[w==1])&gt;=8) 1 else 0} 的地方,您实际上是在说如果 r 的焦点子集至少有 8 个值等于 1 的单元格,您想要返回 1(否则返回 0)。

实现您的目标的一个方法是在阈值为 200 的二进制栅格上执行焦点和。您将应用于移动窗口的函数将是 sum,该焦点和的输出将指示阈值栅格中值为 1 的像元数(这对应于在移动窗口内具有值 >= 200 的 r 的像元数)。

library(raster)
r <- raster(system.file("external/test.grd", package="raster"))

m <- matrix(2 * pointDistance(expand.grid(-5:5, -5:5), c(0, 0), lonlat=FALSE),
            ncol=11, nrow=11)
m <- m <= 10

r2 <- focal(r >= 200, m, sum, na.rm=TRUE, pad=TRUE)
plot(r2)

然后您可以检查该栅格的哪些像元的值 >= 8。

r3 <- r2 >= 8
plot(r3)

在这种情况下,几乎所有单元格都符合您的条件。

【讨论】:

  • 非常感谢。这真的很有帮助。但不幸的是,这模糊了边缘。问题是如果只有矩阵 m 边缘的像素满足约束,中心像素也将被设置为有效。我的另一个想法是引入第三个约束(但这对我来说太先进了)。所有8个像素之间必须以N8关系连接,并且中心像素也应涉及。你知道如何介绍这个问题吗?再次感谢!安妮
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 2021-10-22
  • 2018-04-14
相关资源
最近更新 更多