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

tmap绘制非'value'栅格数值问题:FLIR图像在R中的异常表现

FLIR图像栅格分析:tmap与base R绘图差异的解决方法

问题根源

FLIR相机导出的JPG属于索引色图像:这类图像存储的是像素的索引值(对应内置颜色映射表的位置),而非直接的RGB数值或温度值。

  • raster包读取时,会将这些索引值作为栅格的values存入对象,范围通常为0-255;
  • tmap绘图时会自动调用图像自带的颜色映射表(CLUT),用索引值匹配对应颜色,因此显示效果和原图一致;
  • base R的plot()函数默认使用连续颜色渐变渲染栅格数值,不会读取图像的颜色映射表,所以显示结果与原图不符。

查看tmap使用的颜色映射

方法1:从图像文件提取颜色表

library(jpeg)
# 读取图像并保留颜色映射属性
img <- readJPEG("FLIR0031.jpg", native = FALSE)
# 提取tmap绘图时用的颜色映射表
clut <- attr(img, "col")

方法2:从tmap对象提取图例信息

tm_obj <- tm_shape(r1) + tm_raster()
# 获取图例对应的颜色与数值映射
legend_info <- get_legend(tm_obj)

获取tmap绘图对应的数值

tmap实际绘制的就是栅格的索引值,只是通过颜色映射表转换为了原图的视觉效果。如果需要将索引值转换为对应的RGB颜色值,可以用索引匹配颜色表:

# 获取栅格的索引值
raster_vals <- values(r1)
# 匹配颜色表得到RGB值(R索引从1开始,图像索引从0开始,所以+1)
rgb_vals <- clut[raster_vals + 1]

如果需要提取FLIR图像的实际温度值,注意JPG的像素值是经过颜色映射的索引,需从EXIF元数据读取温度校准参数后转换:

library(exifr)
exif_data <- read_exif("FLIR0031.jpg")
# 查看温度相关校准参数
print(exif_data[, grep("Temperature|Emissivity", names(exif_data))])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:22