我从美国地质勘探局下载了一个陆地卫星8号数据集。我使用以下代码将其导入R:
library(raster)
library(tmap)
B1 <- raster("LC08_L2SP_166072_20210819_20210827_02_T1_SR_B1.TIF")
B2 <- raster("LC08_L2SP_166072_20210819_20210827_02_T1_SR_B2.TIF")
B3 <- raster("LC08_L2SP_166072_20210819_20210827_02_T1_SR_B3.TIF")
B4 <- raster("LC08_L2SP_166072_20210819_20210827_02_T1_SR_B4.TIF")
B5 <- raster("LC08_L2SP_166072_20210819_20210827_02_T1_SR_B5.TIF")
B6 <- raster("LC08_L2SP_166072_20210819_20210827_02_T1_SR_B6.TIF")
B7 <- raster("LC08_L2SP_166072_20210819_20210827_02_T1_SR_B7.TIF")
fcc_nir <- stack(B5, B4, B3)图像为16位。我可以很容易地使用以下命令绘制假彩色复合图像:
plotRGB(fcc_nir, stretch = "lin")

然而,我需要覆盖多边形和添加地图网格等。tmap包做出了伟大的地图,但我仍然必须弄清楚如何应用相同的线性拉伸在tmap。没有明显的伸展选项。当我绘制假彩色合成图像时,它看起来很暗:
tm_shape(fcc_nir) +
tm_rgb(max.value = 65536)

我需要事先手动重放图像吗?
如果tm_rgb()有一个像plotRGB()这样的拉伸参数,那就太好了。提前感谢您的帮助/指导!
发布于 2022-05-09 22:15:20
tm_rgb()的选择有限。plotRGB()函数似乎使用光栅单元格值的示例来执行拉伸操作。这就是为什么图像看起来更明亮和更鲜明的原因。这是我用tm_rgb()所能达到的最好的结果。
fcc_nir <- setMinMax(fcc_nir)
tm_shape(fcc_nir) +
tm_rgb(max.value = max(maxValue(fcc_nir)))

tm_rgb()没有min.value =选项。一个人可以输入一个较小的max.value,但这是一个有点命中和错过。我更愿意使用一种基于图像统计的更严格的方法。
tm_shape(fcc_nir) +
tm_rgb(max.value = 31000)

一个人必须事先手动重放图像,使用raster::stretch()或用户定义的拉伸函数来获得更好的输出。
例如:
fcc_nir_s <- stretch(fcc_nir, minv = 0, maxv = 255, minq = 0.1, maxq = 0.99)
tm_shape(fcc_nir_s) +
tm_rgb()生成以下图像:

https://stackoverflow.com/questions/72150197
复制相似问题