跳到主要内容

OptimizeAT - 控制点约束的空三优化

概述

OptimizeAT 接口用于使用控制点优化空中三角测量结果。该接口在完成刺点(tie point measurement)后调用,通过引入地面控制点(GCP)提高空三的绝对精度。

适用场景
  • 需要高绝对精度的测绘项目
  • 有地面控制点数据
  • 需要验证和提高空三精度
  • 工程测量和专业制图

工作流程

接口调用

命令行调用

reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_config.json

参数说明

  • reconstruct_type: 固定为 3(表示 OptimizeAT)
  • task_json: 配置文件路径

配置参数

OptimizeAT 使用与 ReconstructAT 相同的参数,额外增加控制点参数:

必需参数

所有 ReconstructAT 的必需参数,加上:

参数名类型说明
control_pointJSON控制点组信息

控制点数据结构

ControlPointGroup

{
"coordinate_system": { // 控制点坐标系
"type": 3, // 通常为投影坐标系
"epsg_code": 32650 // 如 UTM Zone 50N
},
"points": [ // 控制点列表
// ControlPoint 对象数组
]
}

ControlPoint

{
"id": "GCP001", // 控制点名称
"coordinate": [x, y, z], // 控制点坐标
"usage": 0, // 0=控制点, 1=检查点, 2=禁用
"observations": [ // 图像观测值
{
"id": 1, // 图像 ID
"uv": [1234.5, 2345.6] // 像素坐标
}
]
}

完整配置示例

基础控制点优化

{
"license_id": 9200,
"working_dir": "C:/Projects/AT_Optimize",
"gdal_folder": "C:/MipMap/SDK/data",
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
"camera_meta_data": [...], // 与 ReconstructAT 相同
"image_meta_data": [...], // 与 ReconstructAT 相同
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 32650 // UTM Zone 50N
},
"points": [
{
"id": "GCP001",
"coordinate": [500123.456, 2500123.456, 123.456],
"usage": 0,
"observations": [
{
"id": 1,
"uv": [2736.5, 1824.3]
},
{
"id": 5,
"uv": [1892.7, 2104.8]
}
]
},
{
"id": "GCP002",
"coordinate": [500223.456, 2500223.456, 125.678],
"usage": 0,
"observations": [
{
"id": 3,
"uv": [3104.2, 1567.9]
},
{
"id": 7,
"uv": [2345.6, 1890.2]
}
]
},
{
"id": "CHECK001",
"coordinate": [500323.456, 2500323.456, 127.890],
"usage": 1, // 检查点
"observations": [
{
"id": 2,
"uv": [1567.8, 2345.6]
}
]
}
]
}
}

高精度测绘项目配置

{
"license_id": 9200,
"working_dir": "C:/Projects/HighPrecision_AT",
"gdal_folder": "C:/MipMap/SDK/data",
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},
"camera_meta_data": [...],
"image_meta_data": [
{
"id": 1,
"path": "IMG_0001.JPG",
"meta_data": {
"pos": [114.123, 22.123, 150.0],
"pos_sigma": [0.05, 0.05, 0.10], // RTK 高精度
"position_constant": false // 允许优化
}
}
],
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 4978 // ECEF for high precision
},
"points": [
// 多个均匀分布的控制点
{
"id": "GCP_NW",
"coordinate": [...],
"usage": 0,
"observations": [...]
},
{
"id": "GCP_NE",
"coordinate": [...],
"usage": 0,
"observations": [...]
},
{
"id": "GCP_SW",
"coordinate": [...],
"usage": 0,
"observations": [...]
},
{
"id": "GCP_SE",
"coordinate": [...],
"usage": 0,
"observations": [...]
},
{
"id": "GCP_CENTER",
"coordinate": [...],
"usage": 0,
"observations": [...]
}
]
}
}

控制点布设原则

1. 数量要求

  • 最少:3 个控制点(解算需要)
  • 建议:5-8 个控制点 + 2-3 个检查点
  • 大区域:每 50-100 张图像至少 1 个控制点

2. 分布要求

理想的控制点分布:

+-----+-----+-----+
| GCP | GCP | GCP |
+-----+-----+-----+
| GCP | CHK | GCP | GCP: 控制点
+-----+-----+-----+ CHK: 检查点
| GCP | GCP | GCP |
+-----+-----+-----+

3. 高程分布

  • 在不同高程层次布设控制点
  • 避免所有控制点在同一平面
  • 山区项目尤其注意高程变化

刺点精度要求

像素精度

  • 理想:< 1 像素
  • 可接受:< 2 像素
  • 需改进:> 3 像素

多视角观测

  • 每个控制点至少在 2 张图像中可见
  • 理想情况下 3-5 张图像
  • 观测角度差异 > 15°

坐标系统注意事项

1. 坐标系一致性

{
// 图像位置通常为 WGS84
"coordinate_system": {
"type": 2,
"epsg_code": 4326
},

// 控制点通常为当地投影坐标系
"control_point": {
"coordinate_system": {
"type": 3,
"epsg_code": 32650 // 根据项目位置选择
}
}
}

2. 常用坐标系

地区EPSG说明
中国4490CGCS2000 地理坐标
中国4547-4554CGCS2000 高斯投影
全球32601-32660UTM 北半球
全球32701-32760UTM 南半球

质量评估

1. 优化报告解读

优化完成后,检查日志中的精度报告:

[INFO] Control Point Residuals:
GCP001: 0.023m (X), 0.015m (Y), 0.041m (Z)
GCP002: 0.019m (X), 0.022m (Y), 0.038m (Z)

[INFO] Check Point Errors:
CHECK001: 0.045m (X), 0.052m (Y), 0.068m (Z)

[INFO] RMS Error: 0.048m

2. 精度标准

项目类型平面精度高程精度
地形测绘< 0.05m< 0.10m
工程测量< 0.10m< 0.15m
一般应用< 0.30m< 0.50m

最佳实践

1. 控制点采集

  • 使用 RTK/全站仪等高精度设备
  • 选择稳定、易识别的地物
  • 记录详细的点位描述和照片

2. 刺点流程

  1. 在空三结果查看器中加载影像
  2. 找到控制点对应的地物
  3. 精确标记像素位置
  4. 检查多视角一致性

3. 迭代优化

# 第一次优化
reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_v1.json

# 检查结果,调整异常点

# 第二次优化
reconstruct_full_engine.exe -reconstruct_type 3 -task_json optimize_v2.json

4. 常见问题处理

残差过大

  • 检查刺点精度
  • 验证控制点坐标
  • 考虑将该点设为检查点

系统性偏差

  • 检查坐标系设置
  • 验证控制点坐标系
  • 考虑相机标定问题

输出结果

优化后的空三结果保存在相同位置:

  • milestones/mvs_optimized.xml - 优化后的内部格式
  • products/AT/block_exchange_optimized.xml - 优化后的交换格式
  • log/optimization_report.txt - 优化报告

示例:完整工作流程

import subprocess
import json

# 1. 执行初始空三
at_config = {
"license_id": 9200,
"working_dir": "C:/Project",
# ... 其他参数
}
with open("at_config.json", "w") as f:
json.dump(at_config, f)

subprocess.run(["reconstruct_full_engine.exe", "-reconstruct_type", "1", "-task_json", "at_config.json"])

# 2. 进行控制点刺点(通常在外部软件完成)

# 3. 准备优化配置
optimize_config = at_config.copy()
optimize_config["control_point"] = {
"coordinate_system": {"type": 3, "epsg_code": 32650},
"points": [
# 控制点数据
]
}
with open("optimize_config.json", "w") as f:
json.dump(optimize_config, f)

# 4. 执行优化
subprocess.run(["reconstruct_full_engine.exe", "-reconstruct_type", "3", "-task_json", "optimize_config.json"])

# 5. 使用优化结果进行三维重建
# ...

下一步


提示:控制点是确保测绘精度的关键。合理的控制点布设和精确的刺点是获得高精度成果的基础。