如何设置terra::stretch参数以匹配plotRGB的stretch="lin"效果?
如何用
terra::stretch模拟terra::plotRGB(stretch="lin")的效果? 你遇到的效果不一致主要有两个核心原因:stretch()默认的输出范围和plotRGB()的拉伸范围不匹配,且绘图时使用的颜色级数存在差异。
问题拆解
terra::plotRGB(stretch="lin")执行线性拉伸时,会将波段值拉伸到0-255区间(对应8位RGB的标准取值范围),且默认采用2%和98%的分位数作为拉伸的上下限。- 你当前的代码中,
stretch(b[[1]], minq=0.02, maxq=.98)默认把值拉伸到0-1区间,同时绘图仅使用64级灰度,和plotRGB()默认的256级灰度存在视觉精度差异。
修正后的代码
调整stretch()的输出范围并匹配颜色级数后,两者效果即可对齐:
library(terra) b <- rast(system.file("ex/logo.tif", package="terra")) # 模拟plotRGB的lin拉伸效果 stretched_b <- stretch(b[[1]], minq=0.02, maxq=.98, to=c(0,255)) plot(stretched_b, col=grey.colors(256), axes=FALSE, legend=FALSE) # 对比plotRGB的原生效果 plotRGB(b, stretch="lin", r=1,g=1,b=1)
关键参数说明
to=c(0,255):指定拉伸后的值范围,完全对齐plotRGB()的内部处理逻辑。grey.colors(256):使用256级灰度,匹配plotRGB()默认的颜色精度。minq=0.02, maxq=0.98:这部分参数是正确的,plotRGB(stretch="lin")默认就是用这两个分位数作为线性拉伸的上下限。
内容的提问来源于stack exchange,提问作者user2955884
相关产品推荐
相关产品推荐

