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

前端 未结 1 705
再見小時候
再見小時候 2021-01-06 01:12

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

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


        
相关标签:
1条回答
  • 2021-01-06 01:52

    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.

    0 讨论(0)
提交回复
热议问题