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

如何解析DJI SDK生成的红外测温raw文件中的温度值?

解决DJI R-JPG辐射值转实际温度的问题

1. 纠正原始数据读取方式

你当前拆分奇偶索引的方式错误,measure.raw的每2个连续字节对应1个像素的16位原始辐射值,而非两个独立数组。执行以下代码正确读取:

import numpy as np

with open('measure.raw', 'rb') as f:
    # DJI SDK默认使用小端字节序,读取为16位无符号整数后重塑为512×640的图像尺寸
    raw_radiance = np.frombuffer(f.read(), dtype=np.uint16).reshape(512, 640)

比如你提供的[69, 1, 69, 1]会被合并为325, 325(0x0145的十进制值),这才是真实的原始辐射数据。

2. 获取温度校准参数

DJI R-JPG内置了辐射校准的斜率(Slope)和截距(Offset),这两个参数是转换温度的核心,可通过两种方式获取:

  • 用dji_irp.exe的info命令提取:
    .\dji_irp.exe -s .\DJI_blablabla.JPG -a info
    
    输出内容里会明确给出温度转换公式及对应参数(例如:Temperature = RawValue * 0.04 - 273.15)。
  • 用EXIF工具读取图片元数据:查找RadiometricCalibrationSlope和RadiometricCalibrationOffset字段(不同机型命名可能略有差异)。

3. 转换为实际温度

使用获取到的真实参数,通过线性公式计算温度(单位通常为摄氏度):

# 替换为你从info命令或EXIF中得到的实际参数
slope = 0.04
offset = -273.15

# 计算温度矩阵
temperature_map = raw_radiance * slope + offset

转换后的数值会落在相机支持的温度范围(比如-20℃到500℃,依型号而定)。

4. 关于有效像素掩码

你之前拆分出的0/1值,实际是16位原始值的高字节部分,无需单独拆分。若需要标记有效像素,可直接通过原始辐射值判断:

# 生成掩码:1表示有效像素,0表示无效
valid_mask = (raw_radiance > 0).astype(np.uint8)

内容的提问来源于stack exchange,提问作者J. Maria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 03:22:21