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中使用Boolean操作符做真值测试实例
Jan 30 Python
Python中splitlines()方法的使用简介
May 20 Python
python开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python简单实现Base64编码和解码的方法
Apr 29 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
pycharm 关掉syntax检查操作
Jun 09 Python
Python延迟绑定问题原理及解决方案
Aug 04 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
python 逐步回归算法
Apr 06 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图片上传代码
2013/11/04 PHP
php发送post请求的三种方法
2014/02/11 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
google广告之另类js调用实现代码
2020/08/22 Javascript
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
python 性能优化方法小结
2017/03/31 Python
python实现Floyd算法
2018/01/03 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
python批量替换多文件字符串问题详解
2018/04/22 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
乌克兰巴士票购买网站:inBus
2021/03/12 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
办公室内勤工作职责
2013/12/11 职场文书
运动会领导邀请函
2014/01/10 职场文书
大学应届生的自我评价
2014/03/06 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
推荐信范文大全
2015/03/27 职场文书
务工证明怎么写
2015/06/18 职场文书
使用Python开发冰球小游戏
2022/04/30 Python
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS