技术研究之智能摆拍航线
1.前言
使用司空2有一个功能,就是可以使用智能摆拍功能,绘制一条航线,就可以进行倾斜摄影的处理。但是在官方的文档中,根本就没有想关参数的说明,只能自己猜了。
2.测区外扩
计算每条边的法向量
对于每一条边 Ei = (Vi, Vi+1),计算其单位法向量 Ni。
边向量 Ei_vec = Vi+1 - Vi
法向量 Ni = (-Ei_vec.y, Ei_vec.x) (逆时针旋转90度)
单位法向量 Ni_unit = Ni / ||Ni||
b) 计算偏移后的边
将每条边 Ei 沿着其单位法向量 Ni_unit 方向平移距离 d,得到新的边 E’i。
c) 计算新顶点 (交点)
偏移后的边 E’i 和 E’i+1 会相交于一点 V’i。这个交点就是新多边形的一个顶点。
这里需要解两条直线的交点方程。
d) 处理拐角
在多边形的拐角处,直接平移边可能会导致自相交或“尖角”。因此,需要根据内角大小进行特殊处理:
钝角: 直接连接两个相邻边的偏移线即可。
锐角: 可能需要插入一个圆弧或直接连接,避免产生过大的“凹陷”。
- 如何确定外扩距离 d?
这个 d 不是任意值,它是由相机参数和重叠率决定的:
航向间距 (D_h): 相邻两张照片中心点沿飞行方向的距离。
D_h = GSD * Sensor_Width / (1 - Overlap_H)
其中 GSD 是地面采样距离,Sensor_Width 是相机传感器宽度(像素数),Overlap_H 是航向重叠率。
旁向间距 (D_w): 相邻航线中心线之间的距离。
D_w = GSD * Sensor_Height / (1 - Overlap_W)
其中 Sensor_Height 是相机传感器高度(像素数),Overlap_W 是旁向重叠率。
外扩距离 d:
为了确保覆盖,通常 d >= D_w / 2。
更精确地说,d 应该等于 D_w / 2 + margin,其中 margin 是一个安全余量,用于应对定位误差和风的影响。
3.生成平行线
找到多边形 P' 的最小外接矩形(或 bounding box)。
从矩形的一侧开始,按步长 D_w(旁向间距)画出一系列平行于方向 θ 的直线。
这些直线会与多边形 P' 的边界相交,形成一系列线段。
4.生成航点
对于多边形 P' 的每一条边 Ej,计算其与直线 L 的交点 Ij。
收集所有有效的交点 Ij。
将这些交点按照它们在直线 L 上的位置排序。
排序后,相邻的两个交点 Ia 和 Ib 构成一条线段 Sa-b,这条线段就是最终航线的一部分。
如果交点数量为偶数,则 P' 被 L 切割成多个不相连的线段;如果为奇数,则说明 L 穿过了多边形的一个顶点,需要特殊处理。
5.加密航点
a) 计算地面采样距离 (GSD)
GSD(Ground Sample Distance)表示影像上一个像素代表的实际地面距离,单位通常是米/像素 (m/pixel)。
GSD = (飞行高度 * 传感器像元尺寸) / (焦距 * 像素尺寸系数) (具体公式可能因相机而异,有些工具直接用传感器物理尺寸和焦距计算)
GSD 是后续所有距离计算的基础。
b) 计算单张照片覆盖范围
根据相机参数和飞行高度,可以计算出单张照片在地面上覆盖的实际宽度和长度。
照片宽度 (W_photo): W_photo = GSD * 传感器宽度像素数
照片长度 (L_photo): L_photo = GSD * 传感器高度像素数
c) 计算航向间距 (Along-track Spacing) 和 旁向间距 (Cross-track Spacing)
航向间距 (D_h): 相邻两张照片中心点在飞行方向上的距离。
D_h = L_photo * (1 - 航向重叠率)
例如:如果照片长度是 50 米,航向重叠率是 80%,那么 D_h = 50 * (1 - 0.8) = 10 米。
旁向间距 (D_w): 相邻航线中心线之间的距离。
D_w = W_photo * (1 - 旁向重叠率)
例如:如果照片宽度是 40 米,旁向重叠率是 70%,那么 D_w = 40 * (1 - 0.7) = 12 米。
6.设置航点动作
外扩测区边界一个方向拍摄,测区内三个方向拍摄,原始测区和外扩边界之间的航点有两个动作
6.生成航线文件
生成航线的wpml文件
