有些事情重复做多次了才注意到之前有哪些步骤操作不规范......
大疆无人机拍摄的热红外照片RJPG只能用大疆红外热分析工具3进行查看;热红外图像的像素点不是温度值,所以原始热红外照片很难在实际中应用,我们需要将其进行转换。
图1 原始热红外照片
通过大疆官网我们知道,需要结合大疆的TSDK工具进行开发,编写代码才能将热红外照片转换成像素点代表温度信息的TIFF或者TIF图像,转成TIFF或者TIF之后才能将热红外图像拼接成为一整张图。
方法总结起来如下:
(1)结合大疆TSDK进行开发,提取热红外照片温度信息,对热红外照片进行转换,得到像素点为温度值的TIFF或者TIF图像。
(2)在Pix4Dmapper软件中进行空三和拼接,以保留温度细节。
1.结合大疆TSDK进行二次开发
大疆TSDK的版本为:dji_thermal_sdk_v1.4_20220929
二次开发的代码如下:
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图像可以保留原始图像的位置信息。
2.热红外照片温度信息提取
之前写的博客内容方法不太对,这里更正一下:
代码需要设置四个参数,这四个参数分别为测量距离,环境湿度,发射率,反射温度。
- 测温距离:待测目标的距离。红外热像仪接收物体自身辐射的红外线生成热像图,距离越远,
红外辐射衰减越多。红外热像仪出厂时默认的标定距离一般是固定的,在这个距离测温最精
确,距离过近或过远都会增大测温误差。
- 相对湿度:目标测量环境下的空气相对湿度。请根据实际测量环境配置,默认 70 即表示相
对湿度为 70%,取值范围 [20~100]。湿度值配置是否准确将影响测温精度,但影响度较小。
- 发射率:被测物体表面以辐射的形式释放能量相对强弱的能力。可参考“常见物质发射率表”
进行配置,由于被测物体表面可能存在腐蚀、氧化等情况,实际发射率值与参考值可能存在
一定差异。发射率配置是否准确将影响测温精度,且影响度较大。
- 反射温度:周围环境物体辐射的能量可能被待测目标表面反射,与待测目标辐射一同被相机
接收,造成测温误差。如果周围环境没有特别的高温或低温物体,反射温度配置为环境温度
即可。反射温度是否配置准确会影响测温精度,数值与环境温度偏差越大影响度越大。
我们先用大疆的红外热分析工具3(DJI Thermal Analysis Tool 3)查看拍摄的热红外图像。添加文件夹中的所有图像:
先点击第一张热红外图像进行查看:
我们可以看到这张图像的一些基本信息以及查看每个像素点的温度值。其中特别重要的是那四个参数的值(测量距离,环境湿度,发射率,反射温度),我们需要将这四个值记住。之所以说那四个参数的值重要,是因为在代码转换前需要进行设置。我们一开始的时候是难以知道其应该设置什么数值的,加上大疆TSDK官方文档里面说无人机拍摄热红外照片飞行高度超过25米的,测量距离参数也只能设置为25米(个人见解:我觉得这有点误导了......),但是这样会带来一些问题,那就是需要不断调整其他三个参数,不断进行转换,看看哪个参数组合转换出来的图像温度值最符合实际,这是非常费时费力的。我之前没有注意到这一点。但是如果忽略大疆TSDK官方的说法,将测量距离参数设置为上述查看到的5米,其他参数也是这样进行设置,那么转换得到的温度图像中的温度会很接近实际,可能误差在3到5度之间,这个时候就可以慢慢调整参数进行微调了。可能大家会觉得误差也不小,但是根据我的经验,如果根据实际将测量距离设置为25米,温度误差会更大。
根据记住的那四个参数的值设置代码里面那四个参数变量的值,然后即可进行转换。
如何查看转换得到的温度图像与实际是否一致呢?我们可以先在大疆的红外热分析工具3(DJI Thermal Analysis Tool 3)里面查看某一个点的温度值,即
然后查看转换得到的温度图像对应点的温度值是否一致,可以使用ArcMap进行查看,如下:
实际温度为38.2度,转换之后温度为41.7,相差3.5度。这时候可以进行参数微调,使得转换之后的温度值更接近实际。
3.pix4d拼接图像
打开pix4d,新建项目,添加路径(建议使用这个,一次性导入全部)
点击Next会显示读取EXIF数据,没有的话拼接可能会出现问题
不用设置什么,直接点Next
不用设置什么,直接点Next
选择左侧的“Thermal Camera”,取消勾选“开始处理”,点击“Finish”
选择左下方的“处理选项”
选择“3.DSM,正射影像和指数”,勾选图中所标选项,然后点击“OK”
点击“开始”即可开始拼接,拼接需要时间比较多,慢慢等
4.拼接报错问题和解决方案
我在拼接M3T相机的时候报错,提示:
[Error]: No calibrated cameras.
和
[Error]: Error e0046: Processing failed. No calibrated cameras.
这个问题我还没有解决,正在查找解决方案。出现该错误的原因可能是航向重叠没有大于等于80%,旁向重叠没有大于等于70%;也有可能是该热红外相机拍摄的数据在前面的代码处理后相机参数不对了,需要重新调整相机参数,但是我从去年开始就转了很多热红外相机拍摄的热红外照片,都没有出现问题,唯独这次的数据一直报错,我怀疑是数据问题,拍摄热红外照片的时候操作不规范、不专业(后续解决后会补充相关内容)
PS:本人也不是什么都懂,还在不断学习当中,希望跟大家互相学习,一起进步