python 三边测量定位的实现代码


Posted in Python onApril 22, 2021

定位原理很简单,故不赘述,直接上源码,内附注释。(如果对您的学习有所帮助,还请帮忙点个赞,谢谢了)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed May 16 10:50:29 2018
@author: dag
"""
import sympy
import numpy as np
import math
from matplotlib.pyplot import plot
from matplotlib.pyplot import show
import matplotlib.pyplot as plt
import matplotlib
#解决无法显示中文问题,fname是加载字体路径,根据自身pc实际确定,具体请百度
zhfont1 = matplotlib.font_manager.FontProperties(fname='/System/Library/Fonts/Hiragino Sans GB W3.ttc')
 
#随机产生3个参考节点坐标
maxy = 1000
maxx = 1000
cx = maxx*np.random.rand(3)
cy = maxy*np.random.rand(3)
dot1 = plot(cx,cy,'k^')
 
#生成盲节点,以及其与参考节点欧式距离
mtx = maxx*np.random.rand()
mty = maxy*np.random.rand()
plt.hold('on')
dot2 = plot(mtx,mty,'go')
da = math.sqrt(np.square(mtx-cx[0])+np.square(mty-cy[0]))
db = math.sqrt(np.square(mtx-cx[1])+np.square(mty-cy[1])) 
dc = math.sqrt(np.square(mtx-cx[2])+np.square(mty-cy[2]))
 
#计算定位坐标  
def triposition(xa,ya,da,xb,yb,db,xc,yc,dc): 
    x,y = sympy.symbols('x y')
    f1 = 2*x*(xa-xc)+np.square(xc)-np.square(xa)+2*y*(ya-yc)+np.square(yc)-np.square(ya)-(np.square(dc)-np.square(da))
    f2 = 2*x*(xb-xc)+np.square(xc)-np.square(xb)+2*y*(yb-yc)+np.square(yc)-np.square(yb)-(np.square(dc)-np.square(db))
    result = sympy.solve([f1,f2],[x,y])
    locx,locy = result[x],result[y]
    return [locx,locy]
    
#解算得到定位节点坐标
[locx,locy] = triposition(cx[0],cy[0],da,cx[1],cy[1],db,cx[2],cy[2],dc)
plt.hold('on')
dot3 = plot(locx,locy,'r*')
 
#显示脚注
x = [[locx,cx[0]],[locx,cx[1]],[locx,cx[2]]]
y = [[locy,cy[0]],[locy,cy[1]],[locy,cy[2]]]
for i in range(len(x)):
    plt.plot(x[i],y[i],linestyle = '--',color ='g' )
plt.title('三边测量法的定位',fontproperties=zhfont1)  
plt.legend(['参考节点','盲节点','定位节点'], loc='lower right',prop=zhfont1)
show() 
derror = math.sqrt(np.square(locx-mtx) + np.square(locy-mty)) 
print(derror)

输出效果图:

python 三边测量定位的实现代码

补充:python opencv实现三角测量(triangulation)

看代码吧~

import cv2
import numpy as np
import scipy.io as scio
if __name__ == '__main__':
    print("main function.")
    #验证点
    point = np.array([1.0 ,2.0, 3.0])
    #获取相机参数
    cams_data = scio.loadmat('/data1/dy/SuperSMPL/data/AMAfMvS_Dataset/cameras_I_crane.mat')
    Pmats = cams_data['Pmats']  # Pmats(8, 3, 4) 投影矩阵 
    P1 = Pmats[0,::]
    P3 = Pmats[2,::]
    #通过投影矩阵将点从世界坐标投到像素坐标
    pj1 = np.dot(P1, np.vstack([point.reshape(3,1),np.array([1])]))
    pj3 = np.dot(P3, np.vstack([point.reshape(3,1),np.array([1])]))
    point1 = pj1[:2,:]/pj1[2,:]#两行一列,齐次坐标转化
    point3 = pj3[:2,:]/pj3[2,:]
    #利用投影矩阵以及对应像素点,进行三角测量
    points = cv2.triangulatePoints(P1,P3,point1,point3)
    #齐次坐标转化并输出
    print(points[0:3,:]/points[3,:])

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
Python实现类继承实例
Jul 04 Python
Python中的魔法方法深入理解
Jul 09 Python
Python下线程之间的共享和释放示例
May 04 Python
Django实现快速分页的方法实例
Oct 22 Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
Python自动化导出zabbix数据并发邮件脚本
Aug 16 Python
python应用文件读取与登录注册功能
Sep 23 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
30行Python代码实现高分辨率图像导航的方法
May 22 Python
聊聊python在linux下与windows下导入模块的区别说明
Mar 03 Python
Python实现视频中添加音频工具详解
Dec 06 Python
python如何读取.mtx文件
Apr 22 #Python
Python中tkinter的用户登录管理的实现
python爬虫之利用selenium模块自动登录CSDN
Python数据清洗工具之Numpy的基本操作
Python基础之Socket通信原理
python numpy中setdiff1d的用法说明
Apr 22 #Python
一行代码python实现文件共享服务器
Apr 22 #Python
You might like
WordPress中用于检索模版的相关PHP函数使用解析
2015/12/15 PHP
PHP读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
2016/08/29 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
vue-form表单验证是否为空值的实例详解
2019/10/29 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[01:08:32]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第二场 1月18日
2021/03/11 DOTA
python中定义结构体的方法
2013/03/04 Python
Matplotlib 生成不同大小的subplots实例
2018/05/25 Python
python贪吃蛇游戏代码
2020/04/18 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
软件测试题目
2013/02/27 面试题
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
大学生入党自我鉴定
2013/10/31 职场文书
招股说明书范本
2014/05/06 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
初三语文教学计划
2015/01/22 职场文书
2015年父亲节寄语
2015/03/23 职场文书
检讨书范文大全
2015/05/07 职场文书
亲情作文之母爱
2019/09/25 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
vue实现拖拽交换位置
2022/04/07 Vue.js