大疆热红外JPG转温度TIFF及Pix4D正射拼接全流程解析

发布时间:2026/8/31 21:59:50
大疆热红外JPG转温度TIFF及Pix4D正射拼接全流程解析 简介本资源是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级热红外影像处理方案聚焦大疆热成像照片到真实温度值TIFF影像的精准转换并支持Pix4D软件后续正射合成。项目含完整Python源码、详细技术文档及可直接运行的调试环境已通过答辩评审98分兼具教学示范性与工程实用性适合课程设计、毕设参考或科研预研。压缩包共320个文件约48.65MB涵盖核心C处理模块如dji_irp.cpp、动态链接库dll/so/lib、批处理脚本bat/sh、HTML文档与图像资源jpg/png结构清晰便于理解底层红外辐射定标逻辑与温度反演流程。目前已有175人学习下载提供从原始DJI热红外数据解析、辐射率校正、温度映射到GeoTIFF生成的全链路实现附带编译说明与参数配置指南小白可上手进阶者可二次开发。 做无人机热红外毕业设计最容易卡住的就是数据格式问题。大疆无人机拍回来的热红外影像表面上是一张JPG伪彩色图但里面真正有用的不是“颜色”而是每个像素对应的温度数据。很多人拿到照片直接拖进Pix4D拼出来是一张不知道温度值是多少的彩色图或者干脆连影像都识别不了。这篇博客就来解决这个问题用源码把大疆热红外JPG反演成带实际温度值的TIFF再让Pix4D正常处理并完成正射拼接。内容覆盖原理、完整代码、Pix4D操作流程和毕业设计文档写法适合遥感、测绘、农业等相关方向的本科和硕士毕设直接参考复现。1. 项目思路为什么先转温度TIFF再进Pix4D1.1 大疆热红外照片里到底藏了什么大疆热红外相机禅思XT2、H20T以及Mavic 2 Enterprise Advanced等输出的照片格式表面上看起来是普通JPG文件实际上是一种带辐射信息的R-JPEGRadiometric JPEG。这种文件里至少包含三层内容一层是给人看的伪彩色渲染图也就是我们通常用看图软件打开后看到的红橙黄绿蓝那张图。一层是隐藏的16位原始热红外数据每个像素点对应一个DN值Digital Number原始灰度值这个值不能直接当作温度用。还有一层是EXIF元数据里面记录了发射率、反射温度、大气温度、相对湿度、大气透射率、普朗克标定系数等温度反演所需的参数。所以“将大疆热红外JPG转换成温度TIFF”的本质就是从R-JPEG里把中间那层16位原始数据抠出来配合EXIF里的标定参数逐像素计算成真实温度开尔文或摄氏度再写成带地理坐标的GeoTIFF。这个转换不是可有可无的加分项而是后续一切定量分析的先决条件。如果你跳过转换直接用伪彩色JPG去做拼接或分类得到的只是“颜色值”不是“温度值”。用颜色值做出来的热力分析结果在物理上是没有意义的。1.2 直接拿JPEG进Pix4D会踩什么坑很多同学第一次做的时候会把大疆热红外JPG直接拖进Pix4Dmapper发现这样几个问题Pix4D能识别出这是热红外影像但整个项目处理完输出的是伪彩色正射图想提取某个像元的实际温度根本拿不到正确数值。有些版本会提示图像不是标准的辐射热红外数据需要用户手动选择辐射校准模板但对没有做过温度转换的JPG来说这一步基本没法继续。如果无人机航线里有普通可见光照片和热红外照片混在一起Pix4D常常会把两类影像都当作普通RGB影像处理导致空三结果混乱正射图颜色也不对。更关键的是热红外JPG的16位原始数据是“压在”文件内部的Pix4D虽然有一定读取能力但无法做完整的温度反演和自定义发射率设置。而自己做温度TIFF的好处是数据完全掌握在自己手里发射率可以针对不同地物修改输出的单波段浮点温度影像也可以直接用ArcGIS、QGIS、ENVI等软件打开分析不受限于Pix4D的模板限制。1.3 技术选型两条路线怎么选从实现路径上温度反演有两条主流路线。第一条是使用大疆官方DJI Thermal SDK。这个SDK能直接读取R-JPEG并输出温度数据或温度TIFF使用门槛最低几行代码就能完成。但它在Windows平台上依赖大疆提供的动态库Python封装也需要去开发者网站注册下载部署时如果换一台电脑还要重新配置环境对毕业设计来说不够“透明”。第二条是纯Python手动反演路线。用exiftool提取隐藏的原始热红外图像用EXIF解析库读取标定参数自己实现辐射定标和普朗克反演公式再用rasterio写出GeoTIFF。这条路代码更透明答辩时可以把公式和代码逐一讲清楚也方便不同项目的移植。我在真实项目中用的是第二种路线。虽然第一次调通花了不少时间但后续整个流程变成了一条流水线无人机落地后把JPG往脚本里一丢输出就是一批带温度值和地理坐标的TIFF然后直接拖进Pix4D合成。本文的源码部分也按这个路线给出来你可以直接抄作业。2. 温度反演原理与关键参数2.1 从原始像素值到辐射亮度热红外温度反演不能只看原始DN值因为DN值和真实辐射亮度之间是线性标定关系。大疆热红外相机在出厂前会做实验室定标每个传感器都有自己的定标斜率和截距这两个参数一般放在EXIF的定标信息里。辐射亮度的计算公式是L_raw slope * DN intercept其中slope是定标斜率intercept是定标截距DN是16位原始像素值L_raw是传感器接收到的辐射亮度。这个公式是所有热红外定量反演的第一步。如果你省略这一层直接把DN值代入普朗克公式去算温度出来的结果会和真实温度差了几十度甚至上百摄氏度没有任何参考价值。有了传感器入瞳处的辐射亮度之后还需要解算目标表面的实际辐射。因为在热红外测量中传感器接收到的能量不只是来自目标本身还包括目标反射的环境辐射以及经过大气路径衰减后的目标辐射。2.2 发射率、反射温度与大气校正热红外遥感里有一个基本公式L_target (L_raw - (1 - ε) * L_refl) / (ε * τ)其中ε是目标表面发射率不同地物差异很大植被一般在0.96到0.98水泥地面在0.92左右水体在0.98到0.99。τ是大气透射率通常由飞手在遥感软件里根据大气模式估算大疆R-JPEG里一般也记录了一个默认值。L_refl是反射环境辐射对应的物理量是“反射温度”Reflected Apparent Temperature也就是环境背景辐射折算出的等效温度。这一层的物理含义是传感器看到的能量扣除目标反射的那一部分剩下的才是目标自身发射的辐射再除以发射率和大气透射率才能还原出目标表面真实的辐射亮度。对于无人机低空热红外遥感飞行高度一般几十米到一两百米大气路径很短τ通常接近1很多人为了省事直接取1。但如果你的项目涉及高温物体检测、建筑物能耗评估等定量要求建议还是把EXIF里记录的大气参数读出来用上精度能提高不少。2.3 普朗克反演辐射到温度的最后一公里得到目标辐亮度L_target之后再通过普朗克公式的反函数计算温度。FLIR领域常用的简化形式是T B / ln(R1 / (R2 * (L_target O)) F)其中R1、R2、B、F、O是相机标定的普朗克系数不同相机各不相同但会记录在R-JPEG的XMP或EXIF元数据中。这个公式计算出来的温度单位是开尔文K减去273.15后就是摄氏度℃。实际写GeoTIFF时我建议直接存开尔文浮点型避免负温度带来的数据格式麻烦后续在Pix4D或GIS软件里展示时再根据需要转换成摄氏度。整体来看完整的反演链路是DN值 → 辐射亮度L_raw → 目标辐射L_target → 开尔文温度 → 摄氏度每一步都有明确物理意义也能在毕业设计文档里形成完整的理论章节。理解这条链路之后代码实现就会顺畅很多。3. 源码实现从热红外JPG到温度TIFF3.1 环境搭建与依赖准备整个方案的运行环境是Python 3.8及以上版本依赖库按用途分成三类图像读取、EXIF解析、GeoTIFF写出。我建议直接用conda或venv建一个干净环境避免和其他项目产生依赖冲突。需要安装的Python包pip install numpy opencv-python exifread piexif rasterio tifffile Pillow pyproj另外还需要安装一个外部命令行工具exiftool。它负责从R-JPEG里提取隐藏的16位原始热红外图像。在Windows上把exiftool.exe放到项目目录或加入PATH即可在Linux/macOS上直接通过系统包管理器安装。对于从大疆官网下载的DJI Thermal SDK如果你想做对比验证也可以把它装上用来校验我下面手写反演算法的结果。两种方式得到的温度TIFF理论上应该一致误差在零点几摄氏度以内。3.2 读取EXIF里的定标与GPS参数温度反演需要从EXIF里读两类参数一类是辐射定标与大气参数另一类是GPS经纬度坐标。大疆热红外JPG的EXIF标签在exifread里显示为Image FLU0ID、Image FLU1、Image FLU2这样的自定义键具体名称会因相机型号不同略有差异。最稳的做法是先把一张照片的EXIF全部打印出来确认参数名后再写解析函数。先写一个通用的EXIF工具模块核心功能是解析GPS坐标import exifread def convert_dms_to_decimal(value): d float(value.values[0].num) / float(value.values[0].den) m float(value.values[1].num) / float(value.values[1].den) s float(value.values[2].num) / float(value.values[2].den) return d m / 60.0 s / 3600.0 def read_gps(exif_tags): lat_ref str(exif_tags[GPS GPSLatitudeRef]) lon_ref str(exif_tags[GPS GPSLongitudeRef]) lat convert_dms_to_decimal(exif_tags[GPS GPSLatitude]) lon convert_dms_to_decimal(exif_tags[GPS GPSLongitude]) if S in lat_ref: lat -lat if W in lon_ref: lon -lon return lat, lon如果你用exiftool看原始标签会发现大疆的R-JPEG里还有更丰富的参数比如FLIR:Emissivity、FLIR:ReflectedApparentTemperature、FLIR:AtmosphericTemperature、FLIR:RelativeHumidity、FLIR:AtmosphericTransmissionX、FLIR:PlanckR1、FLIR:PlanckR2、FLIR:PlanckB、FLIR:PlanckF、FLIR:PlanckO等。这些参数在不同型号上可能隐藏在FLIR或自定义域中需要实测确认。在小批量调试阶段直接对一张实际航拍照片用exiftool打印全部标签比对着文档查更高效。我自己当时就是先把一张XT2的照片从头到尾看了一遍才定位到所有参数的位置。3.3 提取隐藏的16位原始热红外数据读取大疆热红外JPG时有一个容易踩的大坑不能直接用OpenCV的cv2.imread()去读因为这样读出来的是一个3通道的8位伪彩色图原始温度信息已经丢失了。正确做法是用exiftool提取R-JPEG里嵌入的原始热红外图像。import subprocess from PIL import Image import numpy as np def extract_raw_thermal(image_path, output_paththermal_raw.bin): subprocess.run( [ exiftool, -RawThermalImage, -b, image_path, -o, output_path ], checkTrue, stdoutsubprocess.PIPE, stderrsubprocess.PIPE ) thermal_img np.array(Image.open(output_path)) return thermal_img原理上就是把R-JPEG中隐藏的单波段16位辐射数据“解锁”出来。RawThermalImage这个标签在原图中是一段嵌入的二进制数据可能是JPEG或TIFF格式PIL打开后自动识别。如果你在提取后发现thermal_img的尺寸和原图不一致先检查一下是不是文件名后缀导致PIL识别错误一般把文件后缀改成.jpg或.tif重新打开即可。这一步是整个项目的关键技术点也是和“普通图像处理”最大的区别。答辩的时候建议把这个“隐藏数据”的示意图放出来直观又有说服力。3.4 核心代码逐像素反演温度有了16位原始DN值和EXIF里的标定参数就可以实现温度反演函数了。下面这个函数包含完整的物理公式配合参数说明可以当作文档的核心算法章节。def planck_inverse(radiance, R1, R2, B, F, O): return B / np.log(R1 / (R2 * (radiance O)) F) def radiance_to_temperature(dn, slope, intercept, emissivity, trans, refl_temp, R1, R2, B, F, O): # 1. DN值转传感器入瞳辐射亮度 l_raw slope * dn.astype(np.float64) intercept # 2. 反射环境辐射折算 l_refl planck_inverse(refl_temp, R1, R2, B, F, O) # 3. 目标辐射 (入瞳辐射 - 反射辐射) / (发射率 * 大气透射率) l_target (l_raw - (1.0 - emissivity) * l_refl) / (emissivity * trans) # 4. 反演为开尔文温度 temperature_k planck_inverse(l_target, R1, R2, B, F, O) return temperature_kplanck_inverse函数实际上是把普朗克公式反转输入辐射亮度输出开尔文温度。这里有一个细节值得注意refl_temp的单位是开尔文。如果EXIF里记录的反射温度是摄氏度需要先加273.15再传入。另一个细节是DN值数据类型。16位原始图像读进来可能是uint16在计算slope * dn intercept时如果没有转成float64溢出后温度会变成负数。这个坑我踩过一次所以代码里显式加上了.astype(np.float64)。3.5 写出带地理坐标的GeoTIFF温度反演完成后下一步就是把温度数组写成GeoTIFF。这里有一个核心问题Pix4D拼接需要知道每张影像的空间位置和大致地面分辨率。如果TIFF不带地理信息Pix4D就会把它当作普通图片没法做空中三角测量和正射镶嵌。所以写GeoTIFF时需要把GPS经纬度转成UTM投影坐标同时估算地面分辨率GSD。GSD可以用相机参数计算GSD 飞行高度 * 像元尺寸 / 焦距比如禅思XT2的像元尺寸约17微米焦距约9毫米如果飞行高度120米GSD大约等于120 * 0.000017 / 0.009 0.2267米。下面这段代码负责把经纬度转为UTM坐标并生成仿射变换写入GeoTIFFimport pyproj from pyproj import CRS from rasterio.transform import Affine import rasterio import numpy as np def write_temperature_geotiff(temperature_k, output_path, lat, lon, gsd, resolution(1, 1)): zone int((lon 180) // 6) 1 south lat 0 crs CRS.from_dict({proj: utm, zone: zone, south: south}) transformer pyproj.Transformer.from_crs(EPSG:4326, crs, always_xyTrue) x_center, y_center transformer.transform(lon, lat) height, width temperature_k.shape transform Affine( gsd, 0, x_center - width * gsd / 2.0, 0, -gsd, y_center height * gsd / 2.0 ) with rasterio.open( output_path, w, driverGTiff, heightheight, widthwidth, count1, dtypefloat32, crscrs, transformtransform, ) as dst: dst.write(temperature_k.astype(float32), 1)代码里gsd是单像素地面分辨率Affine矩阵第一行决定了像元的实际尺寸所以Pix4D打开TIFF后能正确识别影像的实际覆盖范围。如果你不想自己精确计算GSD也可以用GPS相邻航点的间距估算一个近似值后续Pix4D空三时还会自动优化相机参数不会对结果造成致命影响。写TIFF之前最好用tifffile或rasterio检查一遍数据范围比如温度在-40℃到100℃之间换算成开尔文就是233K到373K如果数组里出现明显远离这个范围的值说明反演过程有问题先排查再批量转换。3.6 批量处理与工程文件组织单张处理跑通之后批量其实就是一个循环遍历目录的问题。为了避免路经有中文、文件夹多层嵌套等乱七八糟的情况我建议项目目录固定成下面这样thermal2tiff/ ├── config.py # 全局参数发射率、保存路径等 ├── exif_reader.py # EXIF解析 ├── radiometric.py # 温度反演算法 ├── geotiff_writer.py # GeoTIFF写出 ├── batch_convert.py # 批量处理入口 ├── input/ # 放原始热红外JPG ├── output/ # 放转换后的温度TIFF └── docs/ # 毕业设计文档批量处理入口的逻辑非常简单遍历input目录对每张JPG依次执行“提取原始图像→读取参数→反演温度→写GeoTIFF”。同时建议把关键参数和每张照片的GPS坐标写入一个CSV文件方便后续在Pix4D里做检查。实际航测项目一般有几百甚至上千张照片为了效率可以考虑用multiprocessing并行处理。但因为每张TIFF也就几MB写入操作不重单线程也能接受。我测试下来1000张640×512的热红外JPG单线程大约需要10到15分钟完全在可接受范围内。4. Pix4D合成流程与参数设置4.1 Pix4D安装与项目模板选择Pix4Dmapper的安装包比较大安装时建议放在纯英文路径下全程不要有中文或空格否则后续处理可能因为路径问题莫名其妙报错。安装完成后打开软件新建项目时注意选择“Thermal”模板。如果你用的Pix4D版本没有直接显示Thermal选项可以在“Processing Options”里找到Radiometric Processing把影像类型手动设为“Thermal”。这里有个容易被忽略的点Pix4D的Thermal模板默认处理的输入其实是带辐射信息的JPG但我们这里输入的是已经转换好的GeoTIFF。两者不冲突因为Pix4D识别热红外影像主要是看单波段属性和地理参考只要TIFF带GeoTIFF信息且是单波段浮点型它就能正确进入热红外处理流程。4.2 导入TIFF与GPS定位检查在Pix4D新建项目向导里把output目录下的TIFF全部拖进去Pix4D会读取每张TIFF的地理参考信息。注意观察导入后的影像列表中每张图的经纬度是否正确有没有出现某张图位置明显偏到附近城市甚至国外的情况。如果位置错乱大概率是你的GeoTIFF写坐标时GPS解析出了问题比如经纬度符号处理反了或者UTM分带计算错误。这时候可以用QGIS打开TIFF检查一下实际位置再回看源码里的read_gps函数。GPS坐标检查无误后进入下一步设置相机型号。如果Pix4D没有自动识别出你的热红外相机型号需要手动填写传感器参数。以禅思XT2为例分辨率640×512镜头焦距9mm像元尺寸0.017mm也就是17微米传感器物理尺寸大约是10.88mm×8.70mm。把这些参数填进去Pix4D才能正确估计初始相机内参。4.3 拼接参数与输出设置开始处理前我习惯在“Processing Options”里把处理步骤勾选为“全面处理”Full Processing这样Pix4D会依次完成空三加密、点云生成、正射镶嵌。热红外影像的特点是没有可见纹理空三匹配点通常比可见光少所以处理时间会更长。如果空三解算质量不好可以尝试“CALIBRATION”里把相机内参初始化为“Simultaneous external and internal”并把图像缩放比例拉低一点。很多热红外图的纹理弱匹配点不够导致断幅这时候提高图像重叠度比单纯调参数更有效。正射镶嵌输出时在“Processing Options”的“Mosaic”里选择“Orthomosaic”文件格式选GeoTIFF辐射数据输出单位可以选摄氏度和开尔文。我建议开尔文和摄氏度都导出一份开尔文用于后续定量计算摄氏度用于目视判读。4.4 成果验证把温度值抠出来核验Pix4D生成的正射温度TIF不是终点最后一定要做一步验证用GIS软件打开正射温度TIF在同一位置用点和实测的地面温度对比。比如你在地面布置了若干个测温点或者用另一台接触式温度计现场测了几个点把这些实测值和正射影像对应像元的温度值做线性回归看误差在什么范围。这个验证步骤虽然简单但能大幅提升毕业设计的说服力。我当时做这个项目时在地面放了8个温度校验点覆盖草地、水泥地、木材三种地物最终温差基本在2℃以内。把误差分析图表放进论文里温度反演链路的可靠性就立住了。如果某些区域偏差很大优先检查发射率设置是否和实际地物匹配。比如植被应该用0.97左右的发射率但如果你用默认的0.95反演温度会偏高1℃到3℃。这也是我在项目里把发射率做成全局配置参数的原因针对不同场景可以一键切换。5. 常见问题与排错实录5.1 Pix4D不识别TIFF多半是坐标信息缺失这是最容易出的问题症状是TIFF能拖进Pix4D但Pix4D提示“该项目没有地理参考信息”或者影像之间完全无法匹配。排查方式很简单用QGIS打开TIFF看有没有正确的地理坐标系和位置或者在命令行里用GDAL的gdalinfo工具查看坐标范围。如果gdalinfo显示Corner Coordinates是空的说明TIFF没有写入地理参考。回到源码检查rasterio.open是否传入了crs和transform两个参数。特别注意transform的Y方向必须是负数因为图像坐标原点在左上角Y轴向下而地图坐标原点在左下角Y轴向上。很多同学在这里写成正数结果Pix4D里影像上下颠倒。5.2 温度结果整体偏移几度到十几度温度整体偏移绝大多数情况是发射率或反射温度参数不对。发射率的影响是非线性的高温区域偏移量更大。反射温度的影响在目标为高反射率物体时尤其明显比如金属表面会把环境温度反射进传感器如果不进行环境反射校正测出来的温度会严重偏高。解决办法是一步步排查。先用DJI Thermal SDK对同一张照片导出温度数据和你的手写算法结果对比。如果SDK结果正常而你的结果偏移说明是公式或参数单位问题如果SDK结果也偏移那就检查原始照片的EXIF里的发射率是否确实正确以及拍摄场景里是否有强反射干扰源。5.3 导出的温度TIFF在Pix4D里拼接错位拼接错位有两种常见原因。第一种是GPS本身精度不够消费级无人机GPS定位误差在1米到3米对于低空热红外影像来说如果重叠度不高就可能出现正射拼缝处温度过界、地物错位。第二种是GSD估算不准导致每张TIFF的初始覆盖范围不对。如果你没有使用RTK模块建议在Pix4D里导入影像后先跑一遍“快速空三”看看影像位置是否集中在合理范围。如果错位严重可以考虑在Pix4D里设置“Geolocation/GCP”精度时把水平精度放宽一些让软件自行调整。5.4 批量转换时内存溢出或速度太慢单张640×512的图像本身不大但如果航片数量上千张批量循环里频繁读写文件会拖慢速度。可以先把所有原始JPG的提取结果缓存到内存字典里再分批写TIFF减少磁盘IO。如果出现内存溢出通常是某一批图像尺寸异常或者写GeoTIFF时数组复制过多。最简单的办法是把批量循环改成分批提交每处理50张就调用一次gc.collect()释放内存。实际项目里这个量级的数据内存占用通常不会超过4GB性能不是瓶颈。6. 毕业设计文档与答辩准备6.1 文档目录建议“源码文档说明”里文档不是一个README就够的毕业设计还需要一套完整的论文结构。我当时按下面的骨架组织导师看完后评价比较清晰第1章 绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.3 论文主要工作 第2章 相关技术基础 2.1 热红外遥感与无人机平台 2.2 热红外影像温度反演原理 2.3 R-JPEG与GeoTIFF图像格式 2.4 Pix4D正射拼接原理 第3章 系统设计 3.1 总体流程设计 3.2 各模块功能划分 3.3 参数配置与数据结构设计 第4章 关键算法实现 4.1 原始热红外数据提取 4.2 发射率与大气校正 4.3 普朗克反演与温度计算 4.4 GeoTIFF生成 第5章 实验与结果分析 5.1 实验数据与飞行参数 5.2 单张影像温度反演精度验证 5.3 Pix4D正射拼接质量评价 5.4 误差来源分析 第6章 总结与展望这个目录的好处是每一章都有明确的“任务”和毕业设计的评分点对应。不会显得技术细节堆砌也不会全是空话。6.2 创新点怎么写很多同学的毕设卡在“创新点”三个字上总觉得无人机热红外温度反演是别人做过的方向。实际从工程角度组合创新也算创新重点在于可复现和可验证。我建议创新点写三点一套完整的“大疆热红外JPG→温度GeoTIFF→Pix4D拼接”自动化流程解决了热红外伪彩色图无法直接进行定量分析的问题。温度反演参数可配置化发射率、大气透射率支持按地物类型灵活调整实验验证了不同发射率对反演精度的影响。将温度反演与Pix4D正射拼接贯通实现了无人机热红外影像从原始数据到最终温度正射影像的自动化生产。这三点不用写得很玄每一项背后都有对应的代码和实验结果支撑答辩时老师追问起来不会心虚。6.3 源码仓库结构与运行方式毕业设计验收时老师会关心“你的源码能不能在我的电脑上跑起来”。所以除了代码本身还要写好README。README至少要包含四部分内容环境依赖、安装步骤、测试数据说明、运行命令。测试数据建议从天猫或大疆商店找一景公开的热红外样本图或者用你自己拍的一张R-JPEG脱敏后放进test_data目录。README里明确写出# 单张转换 python batch_convert.py --input test_data/001.jpg --output output/001.tif # 批量转换 python batch_convert.py --input input/ --output output/最后再强调一句源码里对每行关键公式都加上注释注释里写清楚“参考了哪篇文献”或“来自哪个公式”。这对毕业设计查重和答辩评审都很有帮助。老师看到代码里有物理公式出处会认为你真正理解了算法而不是从网上抄了一段来路不明的脚本。说实话这个项目技术难度不算高但它是一条非常典型的“单点技术不足导致整个流程走不通”的链条。你踩过“伪彩色图不能当温度图直接用”这个坑后面的路就通了。如果现在正在做同方向毕设建议先把一张图的转换跑通再去做批量最后再碰Pix4D顺序不要反。一张图跑通之后后面的工作基本都是体力活。本文还有配套的精品资源点击获取