You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言中如何提取栅格数据某点对应像素的8邻域共9个像素值?

R语言提取栅格点周边3×3邻域像素值实现方法

方法1:基于raster包原生行列定位实现

该方法可以保留邻域像素的空间相对位置,同时兼容栅格边缘的点查询场景:

# 原有基础数据准备
library(raster)
r1 <- raster(ncol=10, nrow=10)
r1[] <- 1:ncell(r1)
x <- c(-6)            
y <- c(-67)
pt <- SpatialPoints(cbind(y,x), CRS("+init=EPSG:4326"))

# 1. 定位目标点对应的栅格行列号
row_pt <- rowFromY(r1, y)
col_pt <- colFromX(r1, x)

# 2. 生成3×3邻域的行列范围,自动处理边界越界问题
row_range <- max(1, row_pt - 1):min(nrow(r1), row_pt + 1)
col_range <- max(1, col_pt - 1):min(ncol(r1), col_pt + 1)

# 3. 提取邻域像素值
neighbor_values <- getValuesBlock(r1, 
                                  row = min(row_range), 
                                  nrows = length(row_range),
                                  col = min(col_range),
                                  ncols = length(col_range))

# 可选:转为3×3矩阵,保持像素的空间位置关系
neighbor_matrix <- matrix(neighbor_values, nrow = length(row_range), byrow = TRUE)

方法2:基于缓冲提取快速实现

如果不需要保留空间位置,只需要获取9个像素的数值,可以直接设置等于栅格分辨率的缓冲半径提取:

# 获取栅格分辨率(经纬度投影下单位为度,和buffer参数单位匹配)
res_r <- res(r1)[1]
# 提取缓冲范围内所有像素值,返回长度为9的向量
neighbor_values <- extract(r1, pt, buffer = res_r)[[1]]

两种方法都可以实现目标点自身+8邻域共9个像素的提取,边界场景下会自动返回实际存在的邻域像素,不会报错。

内容的提问来源于stack exchange,提问作者bic ton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:54:05