Skip to content
Prev 27728 / 29559 Next

how to get the value of a pixel and its 8 surrounding pixels from points?

On Wed, Nov 6, 2019 at 6:18 AM Bede-Fazekas ?kos <bfalevlist at gmail.com>
wrote:
No it isn't. That operates over the whole raster, which is massive overkill
for querying the eight pixels around a single point.
The 8 pixels around X[i,j] are:

X[i-1,j-1], X[i, j-1], X[i+1,j-1]
X[i-1,j], X[i+1,j]
X[i-1,j+1], X[i,j+1], X[i+1,j+1]

as long as those cells aren't now outside the matrix.

So write a function that generates those offsets given i,j:

 > n8 =
function(i,j){cbind(i+c(-1,0,1,-1,1,-1,0,1),j+c(-1,-1,-1,0,0,1,1,1))}

which returns this:

 > n8(23,12)
     [,1] [,2]
[1,]   22   11
[2,]   23   11
[3,]   24   11
[4,]   22   12
[5,]   24   12
[6,]   22   13
[7,]   23   13
[8,]   24   13

Then for a test matrix:
where i,j = 23, 12:
[1] 1123

the 8 neighbours are:
[1] 1022 1023 1024 1122 1124 1222 1223 1224
Now I'm not sure if you can do exactly that with your netcdf object because
netcdf is a structured flexible format, and you've shown `nc[lon, lat, ]`
where `nc` is your netcdf object rather than a variable got from it and I
can't get that to work for my test NCDF. (I have sea surface temp in an
netcdf which I get with `sst = nc_getvar(nc, "sst")` for example). But the
mechanism is the same - compute the index of the 8 neighbour pixels and
extract.