【发布时间】: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>=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