如何解析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 infoTemperature = 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
相关产品推荐
相关产品推荐

