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和pyqt实现360的CLable控件
Feb 21 Python
Python-嵌套列表list的全面解析
Jun 08 Python
Python如何判断数独是否合法
Sep 08 Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 Python
Python使用django框架实现多人在线匿名聊天的小程序
Nov 29 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
Python3实现定时任务的四种方式
Jun 03 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
Python 依赖库太多了该如何管理
Nov 08 Python
详解有关PyCharm安装库失败的问题的解决方法
Feb 02 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 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去除重复字的实现代码
2011/09/16 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
php递归实现无限分类的方法
2015/07/28 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
PHP实现linux命令tail -f
2016/02/22 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
理解Javascript_03_javascript全局观
2010/10/11 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
解决js图片加载时出现404的问题
2020/11/30 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
js实现消息滚动效果
2017/01/18 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
网络技术专业求职信
2014/02/18 职场文书
2014政务公开实施方案
2014/02/19 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
十佳家长事迹材料
2014/08/26 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
组织委员竞选稿
2015/11/21 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python