我有光栅图像,我想应用一个函数,该函数将根据相邻单元格的值给出一个值。在以该单元格为中心的 3x3 窗口中,我想给一个单元格一个介于 0 和 8/8(=1)之间的值,具体取决于多少个单元格(来自该窗口中的其他 8 个单元格)。例如,如果其他 5 个单元格的值与中心单元格不同,则函数必须在该单元格中分配 5/8。我正在尝试使用光栅包中的焦点来做到这一点。
首先,我编写了一个处理 3x3 窗口的函数:
mix<-function(a, na.rm=TRUE){
v==0
b=a[2:2]
if (!(a[1:1]=b)) {
if (!is.na(a[1:1])){v=v+1}else v=v
}
if(!(a[1:2]=b)){if (!is.na(a[1:2])){v=v+1}else v=v}
if(!(a[1:3]=b)){if (!is.na(a[1:3])){v=v+1}else v=v}
if(!(a[2:1]=b)){if (!is.na(a[2:1])){v=v+1}else v=v}
if(!(a[2:3]=b)){if (!is.na(a[2:3])){v=v+1}else v=v}
if(!(a[3:1]=b)){if (!is.na(a[3:1])){v=v+1}else v=v}
if(!(a[3:2]=b)){if (!is.na(a[3:2])){v=v+1}else v=v}
if(!(a[3:1]=b)){if (!is.na(a[3:3])){v=v+1}else v=v}
v
}
然后我尝试像这样使用焦点:
r2<-focal(r, w=matrix(1,3,3), fun=mix(w))
但是:“混合错误(w):找不到对象'v'”
我认为我遗漏了一些东西,也许方法不正确。
任何帮助将不胜感激。
提前谢谢约翰