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随手笔记之标准类型内建函数
Dec 02 Python
python 爬取微信文章
Jan 30 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
13个最常用的Python深度学习库介绍
Oct 28 Python
tensorflow实现简单的卷积神经网络
May 24 Python
python 实现求解字符串集的最长公共前缀方法
Jul 20 Python
python实现图片彩色转化为素描
Jan 15 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
Python使用APScheduler实现定时任务过程解析
Sep 11 Python
Python 实现向word(docx)中输出
Feb 13 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
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
php实现可逆加密的方法
2015/08/11 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
jquery解析xml字符串简单示例
2014/04/11 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
JS实现的表头列头固定页面功能示例
2017/01/10 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
微信小程序点击滚动到指定位置的实现
2020/05/22 Javascript
Python常见文件操作的函数示例代码
2011/11/15 Python
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
python 的列表遍历删除实现代码
2020/04/12 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
Django开发的简易留言板案例详解
2018/12/04 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
Python定义一个Actor任务
2020/07/29 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
python中entry用法讲解
2020/12/04 Python
公务员培训自我鉴定
2013/09/19 职场文书
工程质量承诺书范文
2014/03/27 职场文书
水利水电建筑施工应届生求职信
2014/07/04 职场文书
授权委托书公证
2014/09/14 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
实验心得体会范文
2016/01/25 职场文书
如何使用flask将模型部署为服务
2021/05/13 Python
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript