去年学习摄影测量学的时候,写了python的空间后方交会,想着有时间也写写前方交会,但一直没落实,今年疫情在家,开了一门数字摄影测量课程,再次重温了前方交会,在家也闲来无事,写写前方交会代码

python 空间后方交会程序
https://blog.csdn.net/weixin_44946842/article/details/102662112

这次用到的数据外方位元素已经用上述程序计算好了

计算过程:

参考文献:
[1]杨可明. 摄影测量学基础[M]. 北京:中国电力出版社,2011

简言之就是左右两张像片分别用空间后方交会算出各自的外方位元素,共12个,之后利用内外方位元素和像点坐标计算对应地面点坐标。

数据如下:


第一步:


先利用空间后方交会算出左右像片的外方位元素
python空间后方交会程序在此!!
迭代次数为均为5

左像片运算结果:

右像片运算结果:


第二步


进行前方交会

代码如下

import numpy as np
from math import*
#内方位元素:f,x0,y0  单位mm
In_ele=np.array([[150,0,0]])#左右像片外方位元素  单位mm
Lout_ele=np.array([[4999757.49582,4999738.04354,1999998.07144]])
Rout_ele=np.array([[5896855.86538,5070303.27142,2030428.07609]])
#手动输入同名像点坐标
L_point=np.array([[51.758,80.555],[14.618,-0.231],[49.88,-0.782],[86.14,-1.346],[48.035,-79.962]])
R_point=np.array([[-39.953,78.463],[-76.006,0.036],[-42.201,-1.022],[-7.706,-2.112],[-44.438,-79.736]])#旋转矩阵自己输,或者用下边的旋转矩阵函数算也可以
R1=np.array([[0.99546692,-0.09510813,-0.00022301],[0.09506152,0.99504727,-0.02905583],[0.00298535,0.02890291,0.99957777]])
R2=np.array([[0.99372738,-0.11089881,-0.01439957],[0.11013507,0.99285291,-0.04597144],[0.01939484,0.04409718,0.99883897]])def rotate(out_ele):#计算旋转矩阵函数 out_ele为外方位角元素的行矩阵[[fi],[w],[k]]fi,w,k=out_ele[0,0],out_ele[0,1],out_ele[0,2]a1=cos(fi)*cos(k)-sin(fi)*sin(w)*sin(k)a2=(-1.0) * cos(fi) * sin(k) - sin(fi) * sin(w) * cos(k)a3=(-1.0) * sin(fi) * cos(w)b1=cos(w) * sin(k)b2=cos(w) * cos(k)b3=(-1.0) * sin(w)c1=sin(fi) * cos(k) + cos(fi) * sin(w) * sin(k)c2=(-1.0) * sin(fi) * sin(k) + cos(fi) * sin(w) * cos(k)c3=cos(fi) * cos(w)rotate=np.mat([[a1,a2,a3],[b1,b2,b3],[c1,c2,c3]])return rotatedef BaseLine(L,R):#计算基线分量,L.R为左右像片线元素B=[]for i in range(3):B.append(R[0,i]-L[0,i])return np.array([B])def coordinate(R,P,f):#计算所求点的像空间辅助坐标系,xyz--> XYZ,R为旋转矩阵,P所求点像空间坐标,f为主距XYZ=[]if len(P)>=1:for i in range(len(P)):xyz=np.array([[P[i,0]],[P[i,1]],[(-1)*f]])XYZ.append(np.dot(R,xyz))return XYZdef projection_index(B,XYZ1,XYZ2):#投影系数计算N1=((B[0,0]*XYZ2[2,0])-(B[0,2]*XYZ2[0,0]))/((XYZ1[0,0]*XYZ2[2,0])-(XYZ2[0,0]*XYZ1[2,0]))N2=((B[0,0]*XYZ1[2,0])-(B[0,2]*XYZ1[0,0]))/((XYZ1[0,0]*XYZ2[2,0])-(XYZ2[0,0]*XYZ1[2,0]))return [N1,N2]def GP(XYZ_s1,N,XYZ1):#地面控制点坐标计算XA=XYZ_s1[0,0]+N[0]*XYZ1[0]YA=XYZ_s1[0,1]+N[0]*XYZ1[1]ZA=XYZ_s1[0,2]+N[0]*XYZ1[2]return XA/1000,YA/1000,ZA/1000 #换个单位,变成mL_rotate=R1
R_rotate=R2B=BaseLine(Lout_ele,Rout_ele)
XYZ1=coordinate(L_rotate,L_point,In_ele[0][0])  #左片像空间辅助坐标
XYZ2=coordinate(R_rotate,R_point,In_ele[0][0])  #右片像空间辅助坐标N=[]
G_P=[]
for i in range(len(XYZ1)):N.append(projection_index(B,XYZ1[i],XYZ2[i]))
for i in range(len(XYZ1)):G_P.append(GP(Lout_ele,N[i],XYZ1[i]))
Ground_Point=np.array(G_P)
for i in range(len(G_P)):print(str(i+1)+"号点的地面坐标:XA,YA,ZA\n")print(Ground_Point[i])

运行结果:

编程是可以更好的理解知识点,同时也能练习练习自己的编程能力,有不足,忘读者见谅!
!!感谢阅读!!
希望疫情早点结束,中国加油!

python实现 空间前方交会相关推荐

  1. python空间分析_读书笔记——《python地理空间分析指南》

    本文为<Python地理空间分析指南(第2版)>的读书摘录,顺便挖个坑,进一步对python的几个包做学习整理. 本笔记的用途:了解python地理空间处理的技术框架和实现途径. 第三章 ...

  2. python地理空间分析指南pdf邓世超_Python地理空间分析指南(第2版)源代码.zip

    [实例简介] Python地理空间分析指南(第2版)的随书源代码,需要的朋友可以下载一下~~ [实例截图] [核心代码] Python地理空间分析指南(第2版)源代码 └── Python地理空间分析 ...

  3. 空间前方交会(利用相机外方位元素和像点坐标进行解算)

    目录 一.前言 二.空间前方交会 1. 前方交会的概念 2. 基本公式 三.代码展示 四.小结 一.前言   在摄影测量过程中,得到相机的外方位元素以及地面控制点对应的像点坐标之后,如何解算地面控制点 ...

  4. 双像空间前方交会方法(一)---点投影系数方法

    空间前方交会的目的是已知内外方位元素来求解物点坐标 点投影系数实质就是利用同名光线在各自像空间辅助坐标系中的分量的相似关系来求解 获取已知数据 左右两个像片的12个外方位元素以及内方位元素 量测左右像 ...

  5. 双像空间前方交会两种方法的比较

    另外,对双向空间前方交会的基本概念做一些补充

  6. 双象空间前方交会代码_基于联觉效应的VR交互式图形与图像混合建模

    唐偲祺 摘 要:VR交互式体验的出现,使用户在虚拟场景中感觉到自己是场景中的主体,用户通过三维等交互设备直接控制虚拟世界中的对象,以一种新的观看世界的方式将图像演进到一个新的阶段--图像场景阶段.为传 ...

  7. Python 地理空间分析

    前文 我们将快速浏览 Python 的(空间)数据科学生态系统,并了解如何使用一些基本的开源 Python 包,例如: pandas / geopandas shapely pysal pyproj ...

  8. 《Python地理空间分析指南 第2版》学习笔记-5.1 距离测量

    第5章 Python与地理信息系统 本章主要学习Python处理矢量数据,包含以下内容: 距离测量 坐标转换 矢量数据重投影 Shapefile 文件编辑 海量数据过滤 专题地图创建 非GIS数据类型 ...

  9. 《Python地理空间分析指南(第2版)》——1.9 地理信息系统基本概念

    本节书摘来自异步社区<Python地理空间分析指南(第2版)>一书中的第1章,第1.9节,作者: [美]Joel Lawhead(莱哈德) 更多章节内容可以访问云栖社区"异步社区 ...

最新文章

  1. BERT 蒸馏在垃圾舆情识别中的探索
  2. SharePoint网站集备份与恢复
  3. 有BRT,为啥还建公交港湾
  4. oracle中创建游标,oracle 存储过程创建游标
  5. python语言逆序符号_python的逆序
  6. Adobe illustrator 直接选择工具删除白板 - 连载 6
  7. 很容易学习的JQuery库 : (八) 杂项 noConflict() 方法
  8. Android系统(245)---SystemServer进程的创建流程
  9. Unity3D笔记 英保通三 脚本编写 、物体间通信
  10. 2022Adobe全套资源|PS PR AE
  11. 让xcode5能使用ios6.1模拟器
  12. web文件管理系统_实用开源项目,基于Web的文件管理系统——DocSys
  13. XDG0062 XAML 与XDG0008 XAML 错误的解决办法
  14. 国际商务英语学习[十七]
  15. Bert入门:使用Bert运行MRPC的demo成功案例
  16. 数码相机常用CCD/CMOS尺寸对比
  17. 正确的打字方式,如何正确分配手指控制按键
  18. Python四行代码实现的猜数字小游戏,基于thinker,带GUI界面
  19. python调用有道翻译_python 简单的调用有道翻译
  20. JS - 笛卡尔积算法

热门文章

  1. linux自解压执行程序,如何在Linux中使用shar创建自解压文件
  2. 多线程下载图片并压缩
  3. mxreality.js 免费开源的全景图/全景视频/VR 直播播放器介绍
  4. Jupyter notebook 创建新笔记本出错
  5. 关于open3d的入门到放弃
  6. 【Simulink教程案例6】基于Simulink的自适应PID控制器设计与实现
  7. Python接口获取12306火车票信息
  8. 网狐棋牌框架内核通信设计原理剖析
  9. 结构光-----激光散斑图像评测算法
  10. C语言静态链接库的制作和使用