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字符串拼接、截取及替换方法总结分析
Apr 13 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
python导入模块交叉引用的方法
Jan 19 Python
python实现AES加密与解密
Mar 28 Python
python时间序列按频率生成日期的方法
May 14 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
Python 依赖库太多了该如何管理
Nov 08 Python
Python 求数组局部最大值的实例
Nov 26 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 Python
在Python中通过threshold创建mask方式
Feb 19 Python
pandas DataFrame运算的实现
Jun 14 Python
python-地图可视化组件folium的操作
Dec 14 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高级OOP技术演示
2009/08/27 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
详解php伪造Referer请求反盗链资源
2019/01/24 PHP
js操作textarea方法集合封装(兼容IE,firefox)
2011/02/22 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
vue一步步实现alert功能
2017/07/05 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
深入理解Django的自定义过滤器
2017/10/17 Python
python使用openpyxl库修改excel表格数据方法
2018/05/03 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
python随机数分布random均匀分布实例
2019/11/27 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
2020/02/29 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
总经理助理岗位职责
2013/11/08 职场文书
股权收购意向书
2014/04/01 职场文书
家长对学生的评语
2014/04/18 职场文书
班级学习计划书
2014/04/27 职场文书
文明好少年事迹材料
2014/08/19 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
中秋节感想
2015/08/10 职场文书
python垃圾回收机制原理分析
2022/04/13 Python
MYSQL常用函数介绍
2022/05/05 MySQL
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers