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迭代器和生成器介绍
Mar 06 Python
操作Windows注册表的简单的Python程序制作教程
Apr 07 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Python pandas常用函数详解
Feb 07 Python
小白如何入门Python? 制作一个网站为例
Mar 06 Python
Python + selenium自动化环境搭建的完整步骤
May 19 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
实例详解Python模块decimal
Jun 26 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
Python configparser模块应用过程解析
Aug 14 Python
Spy++的使用方法及下载教程
Jan 29 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
php 在线导入mysql大数据程序
2015/06/11 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
cument.execCommand()用法深入理解
2012/12/04 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
javascript事件模型实例分析
2015/01/30 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
jQuery 实现鼠标画框并对框内数据选中的实例代码
2017/08/29 jQuery
Vue实现购物车场景下的应用
2017/11/27 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[39:21]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.24
2019/09/10 DOTA
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
Python跳出多重循环的方法示例
2019/07/03 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
TensorFlow实现打印每一层的输出
2020/01/21 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
举例说明类变量和实例变量的区别
2016/06/30 面试题
信息工程学院毕业生推荐信
2013/11/05 职场文书
大学生活动策划方案
2014/02/10 职场文书
幼儿园秋游感想
2014/03/12 职场文书
租房合同协议书
2014/04/09 职场文书
文秘个人求职信范文
2014/04/22 职场文书
校长师德表现自我评价
2015/03/04 职场文书
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS