使用tidyterra::geom_spatraster_RGB()绘图出现白点,terra::plotRGB()无此问题
解决tidyterra绘图白点与颜色暗淡问题
问题根源
你遇到的两个问题本质是tidyterra::geom_spatraster_RGB()与terra::plotRGB()的默认行为差异:
- 颜色暗淡:
terra::plotRGB()默认启用stretch="lin"线性拉伸,自动优化像素值的显示范围;而tidyterra默认不做拉伸,直接用原始像素值绘图,导致颜色偏暗。 - 白点:白点通常是栅格中的NA值(无数据区域,比如云层、影像边缘),
terra::plotRGB()会自动隐藏NA值,而tidyterra默认将NA渲染为白色。
解决方案
1. 对栅格做线性拉伸
使用terra::stretch()函数对Sentinel-2影像的RGB波段做线性拉伸,匹配terra::plotRGB()的显示效果:
# 提取RGB对应波段(4,3,2) rgb_rast = ab_sentinel2_rast[[c(4,3,2)]] # 线性拉伸,将值缩放到0-5000(与你设置的max_col_value一致) rgb_stretched = terra::stretch(rgb_rast, minv=0, maxv=5000, stretch="lin")
2. 处理NA值(消除白点)
在geom_spatraster_RGB()中设置na.value = NA,让NA值透明显示,避免白色斑点:
3. 完整修复后代码
library(rsi) library(tidyterra) library(terra) library(tidyverse) library(sf) # 边界创建代码不变 annette_boundary = st_point(c(-131.5, 55.15)) annette_boundary = st_sfc(annette_boundary, crs=4326) annette_boundary = st_buffer(st_transform(annette_boundary, 4326), 20000) ab_sentinel2 = get_sentinel2_imagery( annette_boundary, start_date = "2024-10-20", end_date = "2024-10-22", output_filename = "sentinel2_imagery.tif" ) ab_sentinel2_rast = terra::rast("sentinel2_imagery.tif") ab_sentinel2_rast = terra::project(ab_sentinel2_rast, "EPSG:4326") # 新增:提取RGB波段并做线性拉伸 rgb_rast = ab_sentinel2_rast[[c(4,3,2)]] rgb_stretched = terra::stretch(rgb_rast, minv=0, maxv=5000, stretch="lin") # ggplot绘图(修复白点和颜色问题) ggplot() + tidyterra::geom_spatraster_rgb(data = rgb_stretched, interpolate = F, max_col_value = 5000, maxcell = 5e+05, na.value = NA) + # 隐藏NA值,消除白点 coord_sf(crs = 4326) # 确保坐标系匹配
额外优化(可选:去除云层)
如果想进一步消除云层遮挡,可以用Sentinel-2的质量评估波段(SCL)做掩膜:
# 提取SCL质量波段(通常是第12波段,可通过names(ab_sentinel2_rast)确认) scl_band = ab_sentinel2_rast[[12]] # 定义有效区域:保留植被、裸地、水体(SCL代码:2=植被,4=裸地,6=水体) valid_mask = scl_band %in% c(2,4,6) # 对拉伸后的RGB栅格做掩膜,去除云层等无效区域 rgb_masked = terra::mask(rgb_stretched, valid_mask) # 用掩膜后的栅格绘图 ggplot() + tidyterra::geom_spatraster_rgb(data = rgb_masked, interpolate = F, max_col_value = 5000, maxcell = 5e+05, na.value = NA) + coord_sf(crs = 4326)
内容的提问来源于stack exchange,提问作者nicolr7
相关产品推荐
相关产品推荐

