本文主要是介绍摄影测量学:用Python完成影像内定向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
影像内定向能够将影像架坐标系(框标坐标系)变换为影像上像主点为原点的像坐标系中的坐标。(对于数字化影像则是扫描坐标系到像坐标系的转换)
- 量测上述图像上框标的扫描坐标(即行列号)。
- 根据仿射变换公式列出误差方程,并用程序实现。实现从扫描坐标系(行列号)到像平面坐标系的转换。
仿射变换公式:
得到:
验证过程如下,选择验证点X5,用其框标坐标系中的行列号代替A变换矩阵中的随意一组数值,然后在使用K=A*K 公式进行计算。
得到K矩阵结果,为像平面坐标系的坐标(mm)第二张图中的。
# -*- coding: utf-8 -*-
import numpy as np
import math# 定义mat_A 8行1列 mat_k 8行6列两个矩阵
mat_K = np.mat(np.zeros((8, 1)))
mat_A = np.mat(np.zeros((8, 6)))
# 验证点
xh5 = 5002
yh5 = 2559
# 通过手动输入Xh 和 Yh 确定矩阵·
mat_A = np.mat([[1, 4913, 4913, 0, 0, 0],[0, 0, 0, 1, 4913, 4913],[1, 4913, 205, 0, 0, 0],[0, 0, 0, 1, 4913, 205],[1, 205, 205, 0, 0, 0],[0, 0, 0, 1, 205, 205],[1, 205, 4913, 0, 0, 0],[0, 0, 0, 1, 205, 4913]])mat_K = np.mat([[106.003],[-106.005],[-106.003],[-106.003],[-106.001],[106.003],[106.001],[106.001]])
X_mat = np.mat(np.zeros((6, 1)))
# 利用K=A*X 输出X=A^-1*K
# X_mat是最终内定向结果,含有仿射变换公式中的未知数(a1~3,b1~3)
X_mat = (mat_A.I) * mat_K# 输出X_mat
print("X=[[%f],\n [%f],\n [%f],\n [%f],\n [%f],\n [%f]" % (X_mat[0], X_mat[1], X_mat[2], X_mat[3], X_mat[4], X_mat[5]))
print("检验过程如下:")
print("点位5 坐标:",xh5,yh5)
#mat_A2 矩阵是包含检验点的A变换矩阵
mat_A2 = np.mat(np.zeros((8, 6)))
mat_A2 = np.mat([[1, 4913, 4912, 0, 0, 0],[0, 0, 0, 1, 4913, 4912],[1, 4913, 205, 0, 0, 0],[0, 0, 0, 1, 4913, 205],[1, 205, 205, 0, 0, 0],[0, 0, 0, 1, 205, 205],[1, xh5, yh5, 0, 0, 0],[0, 0, 0, 1, xh5, yh5]])
k_mat = np.mat(np.zeros((8, 1)))
k_mat = mat_A2 * X_mat
#输出
print("X=[[%f],\n [%f]\n" % (k_mat[6], k_mat[7]))
得到计算和验证结果:
这篇关于摄影测量学:用Python完成影像内定向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!