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

如何在R中移除栅格图像内指定多边形对应的像素值

R栅格移除指定多边形对应像素值实现方案

你原思路中直接修改提取得到的ex对象,只会修改你提取出的波段值列表,不会作用于原始栅格对象。如果需要修改栅格本身的像素值,可以按以下两种方案实现:

方案1:过滤多边形后重新掩膜(逻辑最清晰,不易出错)

适合还未做过多后续处理的场景,直接从源头上排除不需要的多边形:

library(raster)
library(sf)

# 读取原始数据步骤和之前一致
EX1 <- raster::stack("ueg.tif")
cxs <- sf::st_read("polygons_cx.shp")

# 移除编号为19、26的多边形
# 注意:如果你的多边形编号不是sf对象的行索引,请替换为对应字段筛选,例如cxs$poly_id %in% c(19,26)
cxs_clean <- cxs[-c(19,26), ]

# 用过滤后的多边形重新掩膜栅格,直接得到清理后的结果
rr_clean <- mask(EX1, cxs_clean)

方案2:直接在已有掩膜结果上删除目标区域

如果你已经完成初始掩膜不想重复计算,可以直接对目标区域赋值为NA:

# 提取需要移除的两个多边形
remove_poly <- cxs[c(19,26), ]

# 将这两个多边形覆盖的栅格像素设为NA
# inverse=TRUE表示对掩膜逻辑取反,仅替换多边形覆盖的区域;updatevalue指定替换为NA
rr_clean <- mask(rr, remove_poly, inverse = TRUE, updatevalue = NA)

补充说明

如果你仅需要修改已提取的波段值结果ex,不需要修改栅格本身,那你写的ex[c(26,19)] <- NA是正确的,执行后19、26号多边形对应的提取值会被设为NA。

验证建议

处理完成后可以执行plotRGB(rr_clean, r=1, g=2, b=3)查看渲染结果,确认19、26号多边形对应的区域已经被清空(显示为透明),避免删错区域。

内容的提问来源于stack exchange,提问作者Igor Cobelo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:06:05