返回工作笔记
NOTE ARCHIVE现场记录无人机2026-07-08
GIS

照片视频与OSD匹配说明

照片视频与OSD匹配说明

Clark 更新于 2026-08-31 阅读约 6 分钟 阅读 2
阅读导航

本次分析使用 5 张去除画面水印的原始照片、2026-06-15-11-06-30-0.mp4 视频及 osd数据.txt。照片画面未叠加人员编号、经[坐标已隐藏]方位角或拍摄时间等文字,但文件内部仍完整保留 EXIF 和 DJI XMP 元数据;视频用于连续目标识别,并通过帧PTS与OSD建立时间对应关系。

照片、视频和 OSD 原文件均未修改。

原始照片属性

项目结果
图像格式JPEG
图像尺寸4032 × 3024
相机/无人机型号DJI M4TD
图像源ZoomCamera
定位状态RTK
高度类型RtkAlt
无人机序列号1581F8HGX252L00A01HD
元数据保留 EXIF 与 DJI XMP

DJI XMP 中包含拍摄时间、经[坐标已隐藏]绝对高度、相对高度、无人机姿态、云台姿态、飞行速度和相机信息。因此,去除画面水印不会影响照片与 OSD 数据的精确匹配。

2. 匹配方法

  1. 读取照片 XMP 中的 CreateDate,作为照片的准确拍摄时间。
  2. 使用照片文件名中的时间进行一致性检查,5 张照片的文件名时间均与 XMP 时间完全一致。
  3. 在 OSD 中查找与照片拍摄时间最接近的记录。
  4. 使用照片 XMP 中的经[坐标已隐藏]绝对高度、飞行姿态和云台姿态与 OSD 进行交叉校验。
  5. OSD 约每 2 秒采样一次,因此照片时刻通常位于相邻两条 OSD 记录之间。

5 组照片与最近 OSD 记录的时间差均小于 0.6 秒,平面坐标差为 0.007 至 0.072 米,绝对高度差为 0.036 至 0.132 米,匹配结果可靠。

3. 照片原始元数据

| 编号 | 拍摄时间 | [坐标已隐藏][坐标已隐藏]绝对高度(米) | 相对高度(米) | 定位状态 | |---|---|---:|---:|---:|---:|---| | 0001 | 2026-06-15 11:11:01 | 114.127909198 | 30.861254631 | 146.117 | 51.326 | RTK | | 0002 | 2026-06-15 11:11:40 | 114.126828554 | 30.862544515 | 147.888 | 53.097 | RTK | | 0003 | 2026-06-15 11:12:21 | 114.128083783 | 30.863489101 | 145.006 | 50.215 | RTK | | 0004 | 2026-06-15 11:13:07 | 114.125727540 | 30.863714579 | 142.123 | 47.332 | RTK | | 0005 | 2026-06-15 11:13:54 | 114.125581324 | 30.861541427 | 142.127 | 47.336 | RTK |

照片姿态及云台数据

编号飞行横滚角飞行俯仰角飞行偏航角云台横滚角云台俯仰角云台偏航角X/Y/Z速度(m/s)拍摄方式
0001-1.70°-2.00°-39.50°0.00°-45.00°-39.00°0.0 / 0.0 / 0.0悬停,约45°斜拍
0002-2.00°-1.30°-35.60°0.00°-90.00°-36.20°0.0 / 0.0 / -0.1悬停,90°垂直俯拍
0003+0.30°-3.30°-126.50°0.00°-45.00°-125.90°0.0 / -0.1 / 0.0基本悬停,约45°斜拍
0004+0.70°-0.30°+137.10°0.00°-45.00°+137.60°0.0 / 0.0 / 0.0悬停,约45°斜拍
0005-2.00°0.00°+51.50°0.00°-45.00°+52.10°0.0 / 0.0 / 0.0悬停,约45°斜拍

说明:照片原始元数据表明 0001、0003、0004、0005 均为约 45°斜拍,0002 为 90°垂直俯拍。

4. 照片与最近 OSD 记录

编号照片时间最近 OSD 时间OSD相对照片时间差(秒)坐标差(米)照片绝对高度(米)OSD高度(米)高度差(米)
000111:11:0111:11:00.546-0.4540.021146.117145.991-0.126
000211:11:4011:11:40.548+0.5480.007147.888147.791-0.097
000311:12:2111:12:20.542-0.4580.072145.006144.891-0.115
000411:13:0711:13:06.476-0.5240.039142.123141.991-0.132
000511:13:5411:13:54.475+0.4750.013142.127142.091-0.036

表中的时间差计算方式为“OSD时间减照片时间”。负数表示 OSD 记录早于照片,正数表示 OSD 记录晚于照片。

0003 云台角采样说明

0003 原始照片 XMP 记录的云台俯仰角为 -45.00°。最近的一条 OSD 记录位于照片前 0.458 秒,其云台俯仰角为 -68.1°;照片后一条 OSD 记录位于 11:12:22.549,其云台俯仰角已经变为 -45.0°

这表明云台在两条 OSD 采样之间从约 -90°转向-45°,照片拍摄时已到达-45°。对于照片样本,应优先采用照片自身XMP姿态;对于视频帧,应使用帧时间、前后OSD数据和插值或姿态变化规则进行匹配,不能只取单条最近记录。

5. 高度字段说明

照片同时提供两类高度:

  • AbsoluteAltitude:RTK绝对高度,与OSD中的height基本一致,本组差值不超过0.132米。
  • `Re[坐标已隐藏]相对于起飞点或参考面的高度,本组约为47至53米。

向研究院交付时应明确高度字段名称和高程基准,避免将相对高度与绝对高度混用。当前数据证明OSD中的height应与照片的RTK绝对高度进行对应。

6. 视频文件分析

本数据包中的 2026-06-15-11-06-30-0.mp4 可用于后续 YOLO 目标识别及视频帧与 OSD 数据匹配。

视频基础参数

项目数值
文件名2026-06-15-11-06-30-0.mp4
视频编码H.264
视频分辨率960 × 720
视频帧数26455
标称帧率30 fps
平均帧率约 27.41 fps
视频流时长965.057 秒
文件总时长965.237 秒,约 16 分 05.237 秒
MP4 creation_time2026-06-15 03:06:30 UTC
北京时间开始时刻2026-06-15 11:06:30.000 +08:00
北京时间结束时刻2026-06-15 11:22:35.237 +08:00

该视频的标称帧率为 30 fps,但根据总帧数和视频流时长计算,平均帧率约为 27.41 fps。因此,不能只用“帧号除以 30”计算帧时间。正式匹配必须读取每一帧在视频容器中的 PTS(Presentation Timestamp,显示时间戳)。

视频性质说明

5 张照片为 4032 × 3024 的相机原始 JPEG,保留 DJI EXIF/XMP;该视频为 960 × 720 的 H.264 码流,没有与照片相同的逐帧 DJI XMP 信息。该视频可作为原始识别输入使用,但从分辨率和数据形态看,应按平台视频码流处理,不应表述为相机原始分辨率视频。

视频反算条件确认

经确认,本案例中视频像素坐标进行地理位置反算所需的以下条件均正确,可按当前视频、OSD及相机配置直接使用,不再作为缺失数据或待确认事项:

  • 视频对应的镜头类型正确;
  • OSD 中记录的变焦倍率正确;
  • 平台画面缩放或裁剪关系正确;
  • liveviewWorldRegion 与视频像素坐标的映射关系正确;
  • 相机内参、畸变参数及不同变焦倍率下的视场角参数正确。

实际反算时仍应读取识别帧对应时刻的变焦倍率和 liveviewWorldRegion,并选择相应的镜头及相机参数参与计算。这属于逐帧参数应用,不代表当前数据存在缺失。

7. 视频与 OSD 时间覆盖关系

数据开始时间结束时间时长
OSD11:06:22.77311:18:51.281748.508 秒
视频11:06:30.00011:22:35.237965.237 秒
视频与OSD有效重叠区间11:06:30.00011:18:51.281741.281 秒
  • OSD 在视频开始前已有 7.227 秒数据,可作为视频起始位置之前的轨迹上下文。
  • 视频从 PTS 0.000 到约 741.281 秒的帧可以匹配到 OSD。
  • 视频约从 00:12:21.281(相对视频开始)之后进入无 OSD 区间。
  • 视频最后约 223.956 秒,即约 3 分 43.956 秒,没有对应 OSD 数据。
  • 超出 OSD 覆盖范围的帧仍可保留 YOLO 识别结果,但必须标记为“无对应OSD”,不得生成目标地理坐标。

8. 视频帧与 OSD 匹配逻辑

8.1 帧绝对时间

视频帧的绝对时间按以下公式计算:

帧绝对时间 = 视频 creation_time(北京时间) + 帧 PTS

其中视频首帧基准时间为:

2026-06-15 11:06:30.000 +08:00

读取帧PTS时应使用 ffprobe、FFmpeg或解码库返回的实际时间戳。帧号仅作为结果索引,不作为精确授时依据。

8.2 查找前后 OSD 点

对于帧绝对时间 T,在按时间排序的 OSD 记录中查找:

前点:timestamp <= T 的最后一条记录
后点:timestamp >= T 的第一条记录

若前点为 T0、后点为 T1,插值比例为:

α = (T - T0) / (T1 - T0)

经[坐标已隐藏]高度和速度等连续数值采用线性插值:

value(T) = value(T0) + α × (value(T1) - value(T0))

8.3 角度插值

无人机偏航角和云台偏航角可能以 -180°~180°0°~360° 表示。插值前应归一化,并沿最短旋转方向计算,避免出现 179°-179° 被错误插值为 的情况。

俯仰角和横滚角在数值连续且姿态变化平稳时可线性插值。出现以下情况时,应将帧标记为“非平稳区间”:

  • 前后OSD的云台角发生明显跳变;
  • 无人机快速转向、升降或加速;
  • 变焦倍率发生变化;
  • liveviewWorldRegion 发生变化;
  • 前后OSD时间间隔异常增大。

非平稳区间仍保存前后原始OSD值和时间差,不应只输出一条最近记录作为确定姿态。0003照片对应时刻就是云台转动发生在两条OSD采样之间的实例。

8.4 匹配计算示例

假设某识别帧的 PTS 为 310.000 秒:

帧绝对时间 = 11:06:30.000 + 310.000秒
             = 11:11:40.000

该时刻前后的OSD记录为:

T0 = 11:11:38.540
T1 = 11:11:40.548
α  = (40.000 - 38.540) / (40.548 - 38.540)
   ≈ 0.727

因此,该帧的位置、高度和速度可按约 72.7% 的比例在两条OSD记录之间插值。姿态角需先检查是否跨越角度边界或处于云台快速转动区间。

9. 照片时间锚点与视频位置

5 张原始照片可作为视频时间轴、画面内容和 OSD 数据的交叉验证锚点:

编号照片绝对时间相对视频开始时间约对应标称30fps帧号是否在有效OSD区间
000111:11:01271 秒8130
000211:11:40310 秒9300
000311:12:21351 秒10530
000411:13:07397 秒11910
000511:13:54444 秒13320

表中的帧号仅为按标称30fps计算的快速定位参考。精确定位仍应使用PTS。5个锚点均位于视频与OSD的有效重叠区间,可以通过画面内容核对视频时间轴是否存在整体偏移。

10. YOLO 识别结果建议格式

视频可在后续运行 YOLO,得到目标类别、置信度及像素框。每条识别结果建议至少包含:

字段说明
video_file视频文件名
frame_index解码后的帧序号,仅作为索引
frame_pts_sec帧PTS,单位秒
frame_time按视频开始时间换算的绝对时间
class_id / class_name目标类别
confidenceYOLO识别置信度
pixel_points目标框4个像素点
osd_prev_index / osd_next_index前后相邻OSD记录索引
osd_prev_time / osd_next_time前后OSD时间
`interpo[坐标已隐藏]插值比例α
`interpo[坐标已隐藏]插值后的经[坐标已隐藏]高度、速度和姿态
time_gap_ms帧到前后OSD的时间差
motion_statestablenon_stableno_osd
osd_context前10条及后10条OSD原始记录

YOLO矩形框可按以下方式转换为4个像素点:

左上:(x1, y1)
右上:(x2, y1)
右下:(x2, y2)
左下:(x1, y2)

推荐处理流程:

  1. 解码视频并读取每帧PTS,同时运行YOLO。
  2. 将PTS换算为绝对时间,判断是否处于OSD有效覆盖区间。
  3. 查找前后相邻OSD记录并执行位置、速度和姿态插值。
  4. 检测云台角、变焦和画面区域变化,生成姿态稳定标记。
  5. 输出YOLO目标框4点、插值遥测及前后各10条OSD记录。
  6. no_osd帧仅输出识别数据,不输出推算地理坐标。

11. 结论

这5张照片是保留完整DJI元数据的原始图像,去除画面水印后仍可独立获取拍摄时间、RTK坐标、高度、无人机姿态和云台角度。照片与OSD在时间、位置和绝对高度上高度一致,可以作为像素位置转地理坐标算法的验证样本。

视频可作为连续YOLO识别输入,并通过视频开始时间 + 帧PTS与OSD建立对应关系。视频前741.281秒具备OSD匹配条件,最后约223.956秒缺少OSD,只适合进行图像识别,不适合进行地理位置反算。

与上一版相比,本次以原始照片XMP为权威来源,修正了0003的拍摄角度:0003实际为约45°斜拍,而不是68°俯拍。同时补充了视频码流与OSD的匹配边界、插值规则和YOLO结果数据结构。