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实现登录人人网并抓取新鲜事的方法
May 11 Python
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Jun 07 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
解决Python3.5+OpenCV3.2读取图像的问题
Dec 05 Python
Python+pyplot绘制带文本标注的柱状图方法
Jul 08 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
Python子进程subpocess原理及用法解析
Jul 16 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
python3处理word文档实例分析
Dec 01 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 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
为了这两部电子管收音机,买了6套全新电子管和10粒刻度盘灯泡
2021/03/02 无线电
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
解决Layui数据表格的宽高问题
2019/09/28 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
2018/01/31 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
Python中print函数简单使用总结
2019/08/05 Python
弄懂这56个Python使用技巧(轻松掌握Python高效开发)
2019/09/18 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
django 文件上传功能的相关实例代码(简单易懂)
2020/01/22 Python
python 画图 图例自由定义方式
2020/04/17 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
草船借箭教学反思
2014/02/03 职场文书
致800米运动员广播稿
2014/02/16 职场文书
老同学聚会感言
2014/02/23 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
运动会口号大全
2014/06/07 职场文书
超市工作总结范文2014
2014/12/19 职场文书
违纪检讨书范文
2015/01/27 职场文书