Fill in gaps (e.g. not single cells) of NA values in raster using a neighborhood analysis

北慕城南 提交于 2019-12-22 09:30:44

问题


With the raster below, with an increased number of NA values

library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
r[r<300] <- NA
summary(getValues(r))

is it possible to 'fill in' only the NA cells? I have been using this helpful post but as seen below, NA values remain in the final product.

fill.na <- function(x, i=5) {
  if( is.na(x)[i] ) {
    return( round(mean(x, na.rm=TRUE),0) )
  } else {
    return( round(x[i],0) )
  }
}  

r2 <- focal(r, w = matrix(1,3,3), fun = fill.na, 
            pad = TRUE, na.rm = FALSE )
summary(getValues(r2))

I suspect the issue is the contiguous areas with NA values and am wondering if there are other options for 'filling in' gaps of missing data.


回答1:


one way would be to enlarge your focus window. You can do so by modifying the "fill.NA" function to take a width argument and computing the position of the center pixel on the fly:

fill.na <- function(x) {
  center = 0.5 + (width*width/2) 
  if( is.na(x)[center] ) {
    return( round(mean(x, na.rm=TRUE),0) )
  } else {
    return( round(x[center],0) )
  }
}  

then:

width = 9
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na, 
            pad = TRUE, na.rm = FALSE)
summary(getValues(r2))

Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
300.0   339.0   408.0   488.7   574.5  1806.0    4661 

You can see that the number of NAs is going down.

However, be aware that since your "holes" share the same NA value of the area outside the raster, this will also expand your raster on the outer side, giving you bogus values. see for example:

width = 15
r2 <- focal(r, w = matrix(1,width,width), fun = fill.na, 
            pad = TRUE, na.rm = FALSE)
plot(rast)

Therefore, you'd have to find a way to distinguish between "true" NA values, and values outside the extent of the dataset.

HTH.



来源:https://stackoverflow.com/questions/45641168/fill-in-gaps-e-g-not-single-cells-of-na-values-in-raster-using-a-neighborhood

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!