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 相关文章推荐
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
基于python的字节编译详解
Sep 20 Python
Python使用requests提交HTTP表单的方法
Dec 26 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
python networkx 根据图的权重画图实现
Jul 10 Python
Python namedtuple命名元组实现过程解析
Jan 08 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 Python
python制作抽奖程序代码详解
Jan 15 Python
分享7个 Python 实战项目练习
Mar 03 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的header和asp中的redirect比较
2006/10/09 PHP
第九节--绑定
2006/11/16 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
PHP 实现文件压缩解压操作的方法
2019/06/14 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
js将long日期格式转换为标准日期格式实现思路
2013/04/07 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
详解ECharts使用心得总结
2016/12/06 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
2020/08/10 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
python中关于日期时间处理的问答集锦
2013/03/08 Python
python模拟登录百度代码分享(获取百度贴吧等级)
2013/12/27 Python
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
python中几种自动微分库解析
2019/08/29 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
Python小白学习爬虫常用请求报头
2020/06/03 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
Python collections.deque双边队列原理详解
2020/10/05 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
培训通知书模板
2015/04/17 职场文书
九九重阳节致辞
2015/07/31 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python