使用大疆TSDK实现对红外照片(R_JPEG)的处理 | 无人机热红外照片R_JPG转成TIF后拼接 | 热红外照片温度信息提取 | 方法二

        前面写了一个将三通道的热红外照片(R_JPEG)转成单通道TIF图像,使单通道TIF图像中每个像素的数值不是表示颜色(0-255),而是表示了温度(数值范围大很多),最后将TIF拼接成完整影像的方法。这个方法步骤多,比较繁琐,下面介绍一个更简单的方法

        系统:windows 10 64位

        TSDK版本:dji_thermal_sdk_v1.4_20220929

        大疆智图版本:DJI Terra 4.0.1

        Pix4D mapper版本:4.4.12

        PyCharm版本:2023

1.下载TSDK,编写python脚本代码

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

TSDK和脚本在同一个文件夹即可

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):
    # 代码可私聊我
    *****
    *****

        运行代码就可以将R_JPG图像转换为TIF格式的图像了TIF图像中每个像素的数据不再表示颜色信息,而是表示了温度,转化完成后的TIF图像可以保留原始图像的位置信息。

        如果不会调节参数或者无论怎么调节参数转换得到的温度图像的温度值与实际相差太大,有这样的一个解决办法:(1)在拍摄地点中找一个易于手动测量温度的一个地点,在图像中找到对应位置;(2)等到一个天气与拍摄天气一样的日子,在同样的时间在指定的地点测量实际温度(物体表面温度,不要测量物体上方空气温度);(3)计算图像温度值与测量得到的值的比例关系;(3)设计算法将所有温度图像按照比例关系调整温度。该方法我已经试过,不会丢失图像的GPS等信息。

        注意:转换后的图像格式可以是TIF,也可以是TIFF,转成什么格式看自己需要。TIF格式的温度图像可以使用大疆智图软件进行拼接,可以不用pix4D,对于不熟悉pix4D软件的人比较友好一些。TIFF格式的图像无法在大疆智图里面拼接,可以使用pix4D进行拼接。

2.使用pix4D mapper拼接TIFF图像

        在pix4D mapper中导入的TIF图像

        可以看到有位置信息,但是没有相机型号、俯仰角、翻滚角、航偏角等信息,这些缺失的信息可以补回来。

        第一步,使用大疆智图导出R_JPG图像的pos信息

        导出的pos.txt包含的信息

        第二步,使用python代码编辑pos信息

import os

path = 'post/'
pos_path = 'post/'
posread = os.path.join(pos_path, "pos.txt")
f = open(posread, encoding='utf8')
poswrite = os.path.join(path, "posT.txt")
for line in f:
    if "D" in line:
        # 获取 name 字段
        i1 = line.find(",")  #  获取 ',' 的索引
        line1 = line[i1 - 12:i1 - 4]  # 获取剩余部分

        # 获取 lat 字段
        line2 = line[i1 + 1:]
        i2 = line2.find(",")  # 获取 ',' 的索引
        line3 = line2[i2 + 1:]  # 获取 'lat' 字段
        line2 = line2[:i2]  # 截取 'lat' 字段之前的部分

        # 获取 lon 字段
        i3 = line3.find(",")
        line4 = line3[i3 + 1:]
        line3 = line3[:i3]

        # 获取 altitude 字段
        i4 = line4.find(",")
        line5 = line4[i4 + 1:]
        line4 = line4[:i4]

        # 获取 yaw 字段
        i5 = line5.find(",")
        line6 = line5[i5 + 1:]
        line5 = line5[:i5]

        # 获取 pitch 字段
        i6 = line6.find(",")
        line7 = line6[i6 + 1:]
        line6 = line6[:i6]

        i7 = line7.find(",")
        line8 = line7[i7 + 1:]
        line7 = line7[:i7]

        i8 = line8.find(",")
        line9 = line8[i8 + 1:]
        line8 = line8[:i8]

        i9 = len(line9)
        line9 = line9[:i9 - 1]

        line = line1 + '.tif ' + line2 + ' ' + line3 + ' ' + line4 + ' ' + line6 + ' ' + line5 + ' ' + line7 + ' ' + line8 + ' ' + line9  # for pix

        print(line)
        with open(poswrite, "a") as fs:
            fs.write(line + "\n")

f.close()

        第三步,在pix4D mapper拼图的时候选择定位信息文件后拼图即可

3.使用大疆智图拼接TIF图像

        自行网上找教程吧,这个不难。

        。。。。。。

        至此,处理完毕

        文中不可避免地可能会有一些错误或遗漏的地方。如果有什么问题请在评论区留言

评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值