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解释执行原理分析
Aug 22 Python
python 使用get_argument获取url query参数
Apr 28 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
基于Python os模块常用命令介绍
Nov 03 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
pytorch下大型数据集(大型图片)的导入方式
Jan 08 Python
Python实现鼠标自动在屏幕上随机移动功能
Mar 14 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
Python pathlib模块使用方法及实例解析
Oct 05 Python
Numpy ndarray 多维数组对象的使用
Feb 10 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详细彻底学习Smarty
2008/03/27 PHP
php匹配字符中链接地址的方法
2014/12/22 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
Fiddler如何抓取手机APP数据包
2016/01/22 Python
详解Python:面向对象编程
2019/04/10 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
利用python中集合的唯一性实现去重
2020/02/11 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
python源文件的字符编码知识点详解
2021/03/04 Python
HTML5 新旧语法标记对我们有什么好处
2012/12/13 HTML / CSS
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
有关HTML5页面在iPhoneX适配问题
2017/11/13 HTML / CSS
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
基层工作经历证明
2014/01/13 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
升学宴家长致辞
2015/07/27 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
Python中的socket网络模块介绍
2022/07/23 Python