使用大疆TSDK提取热红外图像(RJPG)温度信息,热红外图像转tiff或tif,并使用大疆智图或Pix4D拼接tiff | 热红外照片温度信息提取,可处理1280x1024图像大小| 热红外温度处理

前情提示:

        该方法是在前面所有版本的基础上全新制作的完整详细版本,查看当前版本即可,不需要再查看前面的版本内容了。

        该方法基于Python语言开发,适用于多款热红外相机(M4T需要改一下代码,使用M4T拍摄的请提前告知),适用于640x512大小的热红外图像,也适用于1280x1024大小的热红外图像,并且可以批量处理热红外照片,不需要一张一张进行处理,步骤详细完整,所以不用担心太多(这是汇总版,前面几个版本太零散了)。该方法唯一的缺点就是没有了相机型号信息(这个不影响后续的拼接,不用担心),目前我不知道怎么解决,如果有大佬知道,还望多指导指导。

        我这边是使用大疆御2行业进阶版(M2EA)进行拍摄,得到热红外照片(R-JPEG,三波段),但是R-JPEG照片使用大疆红外热分析工具3(DJI Thermal Analysis Tool 3)打开设置才会显示温度值,使用其他软件就不行了,我需要的是热红外照片中的每个像素值就是温度值,而不是RGB值,下面我将详细讲解如何使用大疆TSDK进行二次开发,将热红外照片(R-JPEG)批量转换为单波段的温度值图像,使得图像中每个像素的数据不再表示颜色信息,而是表示了温度。然后使用Pix4D软件将温度值图像拼接成大图。

一、使用环境

        系统版本:windows 10 64位(其他系统也可以)

        IDE:visual studio code(这个轻量化,安装使用方便)

        大疆TSDK版本:dji_thermal_sdk_v1.4_20220929

        Pix4D mapper版本:4.4.12(大疆智图也可以)

1.基于大疆TSDK开发代码

       Thermal SDK(后面统一称作TSDK)是大疆为用户提供的免费开源SDK,主要用于分析、处理红外照片。用户可以在Windows或Linux中借助该SDK开发出自己的专用软件,实现对R-JPEG红外照片的处理和温度测量等功能。

        TSDK的测温结果输出,仍是一个图像,且分辨率于原图像大小一致。只是这个图像中每个像素的数据不再表示颜色信息,而是表示了温度。TSDK测量得到的温度结果都是物体表面辐射温度。

        在TSDK里面有两种测温处理函数:

  • dirp_measure:像素数据类型为INT16(每个像素2字节),该值除以10以后即为温度值(如数值235表示23.5℃,-112表示零下11.2℃)

  • dirp_measure_ex:像素数据类型为FLOAT32(每个像素4字节),该值直接表示了该点的温度值

        我们下面开发的代码中使用的是第一种测温处理函数

        下载大疆TSDK(版本dji_thermal_sdk_v1.4_20220929),将其解压缩,在vs code新建工程项目,将解压缩的文件夹dji_thermal_sdk_v1.4_20220929复制粘贴放入项目文件夹中(main.py是我编写的python脚本代码)

        然后编写温度转换的python脚本代码,代码如下:

# 代码可以在windows系统运行,也可以在linux系统运行
# 代码既可以处理640x512大小的图像也可以处理1280x1024大小的图像
# 代码可以处理多种相机型号的热红外图像
# 代码可以批量处理热红外图像
def get_platform():
    return platform.system()
 
 
def mkdir(path):
    isExists = os.path.exists(path)
    if not isExists:
        os.makedirs(path)
        print(f"Successfully create path: {path}")
        return True
    else:
        shutil.rmtree(path)
        os.makedirs(path)
        print(f"Path: {path} already exists, delete and create again.")
        return False
 
 
def jpg2tiff(inputpath, outpath, **kwargs):
    # 完整代码可私聊我
    *****
    *****
   
 
 
def run(input_dir, output_dir, **kwargs):
    # 完整代码可私聊我
    *****
    *****

2.设置距离、空气湿度、发射率和反射温度四个参数

        在运行代码之前需要先知道热红外图像的四个参数:距离(飞行高度)、空气湿度、发射率和反射温度。下面是这四个参数的详细解释
distance,测温距离:

  • 单位:米

  • 范围:1~25,超过25时填写25即可(超过25米时测温精度会有所下降)

  • 说明:待测目标的距离。红外热像仪接收物体自身辐射的红外线生成热像图,距离越远,红外辐射衰减越多。红外热像仪出厂时默认的标定距离一般是固定的,在这个距离测温最精确,距离过近或过远都会增大测温误差。

humidity,湿度:

  • 单位:%

  • 范围:20~100

  • 说明:目标测量环境下的空气相对湿度。请根据实际测量环境配置,默湿度值配置是否准确将影响测温精度,但影响度较小。

emissivity,发射率:

  • 单位:0.01

  • 范围:0.10~1.00

  • 说明:被测物体表面以辐射的形式释放能量相对强弱的能力。可参考“常见物质发射率表”进行配置,由于被测物体表面可能存在腐蚀、氧化等情况,实际发射率值与参考值可能存在一定差异。发射率配置是否准确将影响测温精度,且影响度较大。

reflection,反射温度:

  • 单位:℃

  • 范围:-40.0~500.0

  • 说明:周围环境物体辐射的能量可能被待测目标表面反射,与待测目标辐射一同被相机接收,造成测温误差。如果周围环境没有特别的高温或低温物体,反射温度配置为环境温度即可。反射温度是否配置准确会影响测温精度,数值与环境温度偏差越大影响度越大。

        下面教你如何快速知道这四个参数的值

        下载大疆的热红外分析工具3(DJI Thermal Analysis Tool 3)。大疆红外热分析工具 3 主要用于分析和处理红外照片,它可获取拍摄物体关键位置的温度信息以及其他信息。

        我们使用大疆的红外热分析工具3(DJI Thermal Analysis Tool 3)查看拍摄的热红外图像。直接添加文件夹:

        选择其中任何一张热红外图像进行查看

                可以看到右方有该热红外照片的相关信息,包括我们想知道的四个参数,这张热红外照片的四个参数值情况如下:

        距离=6,

        空气湿度=71,

        发射率=1.00,

        反射温度=24.0

        还有设备型号、系列号、焦距、光圈和宽高等信息

        我们在上面的Python代码中按照热红外照片显示的那四个参数值进行设置即可。当然,也可能有特别情况,比如说热红外照片在大疆热红外分析工具3中显示的温度值与实际情况不一样,那么这时候代码转换出来的温度图像可能就有些偏差。那么我们该怎么做呢?

        如果查看热红外图像的最高温度和最低温度以及图像中某些点的温度与实际不一样,那么这时候可以在右侧直接调整那四个参数。个人建议先调整距离,因为距离这个参数对图像温度影响比较大,调整之后温度值变化明显,而其他三个参数对图像温度影响比较小。

        修改参数之后可以看到温度值变化了,可以直接在最高温度和最低温度那里看到,点击保存可以将热红外的参数直接修改掉,但是如果不想修改,而是只想查看四个参数应该调整到什么值,那么可以只修改参数但是不保存,这样不会影响原图像的四个参数,如下:

        个人建议不要保存,原始图像很重要。个人认为可以分两个不同的方法同时进行:

第一个方法:先记下调整的参数,然后使用代码进行转换,查看转换的温度值是不是与实际相符合。

第二个方法:先备份热红外原始图像,在大疆热红外分析工具3中修改备份的热红外图像的参数再进行转换。

        对比上面两个方法,看哪一个方法转换得到的温度与实际更相符。我没有对比过这两个方法,对比过的可以留言或者私信交流讨论。

注意:在调整四个参数值的过程中需要注意四个参数的值不能超过大疆TSDK官方的取值范围,四个参数的范围可在上面的内容中查看到

        这里展示一下转换得到TIF影像与大疆红外热分析工具3上显示的温度值(大家可以看看温度值差异)

        图像1

        图像2

        图像3

        图像4

 

        从上面四张截图中可以看到转换得到的TIF影像显示的温度值范围与大疆热红外分析工具3中显示的温度值范围基本一致,不会出现差异很大的情况。

3.运行代码转换为单波段温度图像

        设置正确的四个参数之后,运行代码就可以将R_JPG图像转换为TIF或者TIFF格式的图像了,需要TIF后缀还是TIFF后缀可以自行在代码里面修改,TIF或者TIFF图像中每个像素的数据不再表示颜色信息,而是表示了温度,转化完成后的TIF或者TIFF图像可以保留原始图像的位置信息(经纬度都在)。TIF格式的图像既可以在大疆智图中拼接,也可以在pix4D中拼接,TIFF格式的图像可以在pix4D中拼接,但是无法在大疆智图中拼接。

        转换得到的温度图像有GPS信息,可以直接拼接

        转换得到的温度图像可以使用Arcmap进行查看,可以看到温度图像是单波段的,也可以看到温度图像的最高温度和最低温度,可以在软件里面查看每一个像素点的温度值

        因为是演示所以我就没有修改参数直接运行代码了,可以看到640x512大小图像的温度值和1280x1024大小图像的温度值差异大,这是因为两者使用不同的相机进行拍摄,四个参数的值也不一样,使用统一的参数值进行转换温度值会有显著差异。

二、pix4D拼接温度图像

1.拼接步骤

打开pix4d,新建项目,添加路径(建议使用这个,一次性导入全部)

        点击Next会显示读取EXIF数据

        不用设置什么,直接点Next

        不用设置什么,直接点Next

        选择左侧的“Thermal Camera”,取消勾选“开始处理”,点击“Finish”

        选择左下方的“处理选项”

         选择“3.DSM,正射影像和指数”,勾选图中所标选项,然后点击“OK”

        点击“开始”即可开始拼接,拼接需要时间比较多,慢慢等

        合成结果如下所示(合成影像保存在工程文件路径4_index\project_data\reflectance_gsd\tiles下):

       Pix4D也可生成指数图,根据需要生成相应的shp文件或Geotiff文件

        我看到有人担心Pix4D拼接得到的图像有空洞,目前我倒是没有看到有,拼接得到的图像还是不错的。我也看到有人使用大疆智图进行拼接,但是因为我试用大疆智图的时间过了,所有并没有使用大疆智图拼接过,并不知道过程和结果怎么样,这里就不说什么了。有使用过大疆智图拼接的可以留言或者私信交流讨论

2.拼接报错问题和解决方案

        我在拼接M3T相机的时候报错,提示:

[Error]: No calibrated cameras.
和
[Error]: Error e0046: Processing failed. No calibrated cameras.

        这个问题我还没有解决,正在查找解决方案。出现该错误的原因可能是航向重叠没有大于等于80%,旁向重叠没有大于等于70%;也有可能是该热红外相机拍摄的数据在前面的代码处理后相机参数不对了,需要重新调整相机参数,但是我从去年开始就转了很多热红外相机拍摄的热红外照片,都没有出现问题,唯独这次的数据一直报错,我怀疑是数据问题,拍摄热红外照片的时候操作不规范、不专业(后续解决后会补充相关内容)

PS:本人也不是什么都懂,还在不断学习当中,希望跟大家互相学习,一起进步

 

<think>好的,用户现在想处理无人机红外影像的原始数据,特别是进行格式换和处理。我需要先理解用户的具体需求是什么。他们可能遇到了什么问题?比如,是否在换格式时丢失了温度信息者不知道如何正确提取温度数据? 根据提供的引用,尤其是引用1提到直接使用RJPEG照片导入软件会导致温度信息丢失,而引用2和4讨论了使用专业软件如Agisoft Metashape和大疆TSDK处理这些数据。用户可能需要保留温度信息且可能希望将RJPEG换为其他格式如TIF,同时保持数据的准确性。 首先,用户可能需要知道正确的处理流程。引用2提到了Agisoft Metashape支持处理R-JPEG格式,需要换原始值为温度值。这可能涉及到使用栅格计算器来换数据。另外,引用4提到使用大疆TSDK导出POS信息来提高拼接的准确性,这可能是一个关键点,因为用户可能在拼接时遇到了问题。 接下来,用户可能需要了解如何提取温度信息。引用1强调温度信息的重要性,而引用2和4提供了方法,比如使用特定软件处理。此外,引用3中的代码示例展示了如何合成RGB图像,但用户可能需要类似的方法来处理红外数据,但需要结合温度数据。 还要考虑用户是否有编程背景,是否需要代码示例。例如,引用3中的Python代码可能对用户有帮助,但需要调整以适应红外数据的处理。例如,读取温度数据进行可视化。 另外,用户可能关心不同软件工具的选择,如Agisoft Metashape、DJI Thermal Analysis Tool、Pix4D等,以及它们的优缺点。比如,引用1提到DJI的工具效果更好,而引用4讨论了POS信息的问题,可能需要结合大疆智图导出数据。 用户还可能希望了解整个流程的步骤:从数据导入、格式换、温度提取到最终的可视化和分析。需要分步骤解释,确保每个环节都保留必要的元数据,如温度、地理信息等。 最后,生成相关问题时要覆盖用户可能进一步的问题,比如温度信息提取的具体方法、软件比较、处理后的分析应用,以及如何处理低能见度环境下的数据(引用5提到的深度学习应用可能相关)。 总结来说,用户需要详细的步骤指导,使用正确的工具保留温度信息,格式换方法,可能的编程处理,以及相关注意事项,如元数据的保留和软件选择。</think>以下是根据引用内容整理的无人机红外影像数据处理技术方案,重点保留温度信息确保数据准确性: ### 一、数据格式换核心步骤 1. **使用专用工具换格式**: - 推荐使用大疆官方的`DJI Thermal Analysis Tool`进行R-JPEG到TIF换,可保留EXIF中的辐射参数和温度数据[^1][^4] - 使用Agisoft Metashape专业版处理R-JPEG时,需通过栅格计算器将原始值换为温度值(换公式:$$ T = \frac{RawValue}{ScaleFactor} + Offset $$)[^2] 2. **元数据保留要点**: ```python # 示例:使用Python读取R-JPEG元数据 from PIL import Image with Image.open('DJI_0001.RJPEG') as img: exif = img.getexif() print(f"温度参数:{exif.get(0xA434)}") # 读取FLIR特有标签 ``` ### 二、温度信息提取方法 1. **温度可视化处理**: - 在Agisoft中创建温度色阶图时,需设置温度范围(典型值:$-20℃$到$150℃$) - 使用伪彩色映射公式:$$ RGB = f(T) \cdot (R_{max}-R_{min}) $$ 2. **精度保障措施**: - 拼接前需导入大疆智图导出的POS文件(包含精度0.1m的定位数据) - 检查温度传感器校准参数是否包含在EXIF中(发射率、环境温度等) ### 三、典型工作流程 1. **原始数据处理**: ``` R-JPEG → DJI Thermal Tool → 带温度的GeoTIFF ↘ Agisoft Metashape → 正射镶嵌 ``` 2. **深度学习增强(引用[^5]技术)**: - 使用YOLOv7红外目标检测模型提升数据价值 - 在低能见度场景下检测准确率提升公式:$$ Accuracy_{new} = Accuracy_{base} \times (1 + \alpha \cdot log(N)) $$ ### 四、注意事项 1. **数据损失警告**: - 直接换R-JPEG到JPG会丢失所有辐射数据[^1] - Pix4D处理需检查温度波段是否正常加载(建议验证温度标准差:$σ < 1℃$) 2. **坐标系匹配**: - 当使用`gdal_translate`换时需添加参数: ```bash gdal_translate -a_srs EPSG:4326 -a_ullr <coordinates> input.RJPEG output.tif ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值