倾斜摄影测量的唯一理论基础是 中心投影共线方程,描述摄影中心 S、像点 p、物点 P 三点共线的几何关系:
{x−x0=−fa3(X−XS)+b3(Y−YS)+c3(Z−ZS)a1(X−XS)+b1(Y−YS)+c1(Z−ZS)y−y0=−fa3(X−XS)+b3(Y−YS)+c3(Z−ZS)a2(X−XS)+b2(Y−YS)+c2(Z−ZS)
参数严格定义:
(x,y):像点在像平面坐标系中的坐标(单位:mm)
(x0,y0):像主点坐标(相机内参,出厂标定)
f:相机主距(等效焦距,单位:mm)
(XS,YS,ZS):摄影中心在大地坐标系中的坐标(外参线元素)
(X,Y,Z):物点在大地坐标系中的坐标
R=a1b1c1a2b2c2a3b3c3:旋转矩阵(外参角元素,由 φ,ω,κ三个姿态角计算)
旋转矩阵与姿态角的转换关系:
R=RκRωRφ=cosκ−sinκ0sinκcosκ0001cosω0sinω010−sinω0cosω1000cosφ−sinφ0sinφcosφ
空中三角测量的本质是 非线性最小二乘优化问题,目标是最小化所有像点的重投影误差平方和:
min∑i=1N∑j=1M[(xij−x^ij)2+(yij−y^ij)2]
其中:
N:像点总数
M:影像总数
(xij,yij):第 i个像点在第 j张影像上的观测坐标
(x^ij,y^ij):根据共线方程计算的像点理论坐标
待优化变量:
每张影像的外方位元素: XSj,YSj,ZSj,φj,ωj,κj(共 6M 个变量)
每个加密点的大地坐标: Xi,Yi,Zi(共 3N 个变量)
线性化求解:
将共线方程在初始值处泰勒展开并取一阶项,得到误差方程:
v=Bt+Cx−l
其中:
v:残差向量
B:外方位元素的偏导数矩阵
t:外方位元素的改正数向量
C:物点坐标的偏导数矩阵
x:物点坐标的改正数向量
l:常数项向量(观测值与理论值之差)
通过法方程 Nt+U=0求解改正数,迭代至改正数小于阈值(一般为 10−6m)。
采用 PatchMatch Stereo算法生成密集点云,核心是为每个像素找到在其他影像上的对应点,计算其三维坐标。
代价函数:
C(p,d)=∑q∈N(p)NCC(I1(q),I2(q+d))
其中:
p:参考影像上的像素
d:视差
N(p):像素 p的邻域窗口(一般为 3×3 或 5×5)
NCC:归一化互相关系数,衡量两个窗口的相似度
通过随机初始化、空间传播、随机搜索三个步骤迭代优化,得到每个像素的最优视差,再根据共线方程转换为三维坐标。
表格
|
项目 |
城市建成区 |
一般地形区 |
工业厂区 |
|---|---|---|---|
|
地面分辨率(GSD) |
≤2cm |
≤5cm |
≤1cm |
|
飞行高度(相对航高) |
H=aGSD⋅f |
H=aGSD⋅f |
H=aGSD⋅f |
|
航向重叠度 |
≥85% |
≥80% |
≥90% |
|
旁向重叠度 |
≥75% |
≥70% |
≥80% |
|
最大飞行速度 |
≤10m/s |
≤15m/s |
≤8m/s |
|
影像旋偏角 |
≤8° |
≤10° |
≤5° |
公式说明: a为像元尺寸(单位:mm),例如索尼 A7R IV 相机像元尺寸为 3.76μm=0.00376mm,焦距 f=24mm,要求 GSD=2cm 时,相对航高 =0.003760.02×24≈127.7m。
运行
import subprocessimport os # 1. 特征提取与匹配 subprocess.run([ "colmap", "feature_extractor", "--database_path", "database.db", "--image_path", "images", "--SiftExtraction.use_gpu", "1"], check=True) subprocess.run([ "colmap", "exhaustive_matcher", "--database_path", "database.db", "--SiftMatching.use_gpu", "1"], check=True) # 2. 稀疏重建(增量式SfM) subprocess.run([ "colmap", "mapper", "--database_path", "database.db", "--image_path", "images", "--output_path", "sparse"], check=True) # 3. 绝对定向(导入GCP) subprocess.run([ "colmap", "point_triangulator", "--database_path", "database.db", "--image_path", "images", "--input_path", "sparse/0", "--output_path", "sparse/gcp", "--control_points_path", "gcp.txt"], check=True)
运行
# 1. 将COLMAP稀疏重建结果转换为OpenMVS格式InterfaceCOLMAP -i sparse/gcp -o scene.mvs# 2. 稠密重建DensifyPointCloud scene.mvs -o scene_dense.mvs --resolution-level 1# 3. 网格重建ReconstructMesh scene_dense.mvs -o scene_mesh.mvs --decimate 0.5# 4. 纹理映射TextureMesh scene_mesh.mvs -o scene_textured.mvs --resolution 4096
模型精度:
平面精度:≤5cm(GSD=2cm 时)
高程精度:≤8cm(GSD=2cm 时)
纹理精度:纹理分辨率≥GSD,无明显拉伸与色差
总误差由三部分组成:
Mtotal=MGCP2+M空三2+M重建2
其中:
MGCP:地面控制点测量误差(一般为 2-3cm)
M空三:空三解算误差(一般为 1-2 倍 GSD)
M重建:密集匹配与表面重建误差(一般为 1-2 倍 GSD)
表格
|
问题现象 |
根因分析 |
量化解决方案 |
|---|---|---|
|
空三解算失败,匹配点数量不足 |
影像重叠度 <70%,或纹理缺失区域占比> 30% |
增加航飞架次,将航向重叠度提高至 85% 以上;在纹理缺失区域人工布设编码标记点,密度≥1 个 / 100㎡ |
|
模型出现分层、错位 |
空三解算精度低,重投影误差 > 1 像素 |
增加地面控制点密度至每平方公里 5 个以上;优化光束法平差参数,将迭代次数增加至 100 次,收敛阈值降低至 10−7 |
|
玻璃幕墙、水面区域出现漏洞 |
无纹理区域无法进行立体匹配 |
结合 LiDAR 点云补全几何,LiDAR 点密度≥50 点 /㎡;使用泊松表面重建算法填充孔洞,重建深度参数设为 10 |
|
纹理色差大,拼接痕迹明显 |
光照条件变化大,相机曝光不一致 |
采用全局色彩校正算法,将所有影像的均值与标准差统一;使用纹理融合算法,在纹理边界处进行 5-10 像素的羽化处理 |
|
模型加载慢,浏览器端卡顿 |
模型数据量过大,未进行轻量化处理 |
对模型进行 LOD 分级,共分 5 级,最粗级三角形数量减少 90%;使用 Draco 压缩几何数据,压缩比设为 10:1;使用 KTX2 压缩纹理数据 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049756/viewspace-3172382/ ,如需转载,请注明出处,否则将追究法律责任。