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的源码浅要剖析Python的内存管理
Apr 16 Python
Python 私有函数的实例详解
Sep 11 Python
Python运维之获取系统CPU信息的实现方法
Jun 11 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
Python爬虫实现简单的爬取有道翻译功能示例
Jul 13 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
详解Python3定时器任务代码
Sep 23 Python
Django框架model模型对象验证实现方法分析
Oct 02 Python
使用Python和百度语音识别生成视频字幕的实现
Apr 09 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 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中的Class的几点个人看法
2006/10/09 PHP
实用函数4
2007/11/08 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
2011/05/04 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
PHP实现递归的三种方法
2020/07/04 PHP
srcElement表格样式
2006/09/03 Javascript
纯js实现瀑布流展现照片(自动适应窗口大小)
2013/04/08 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
Python装饰器基础详解
2016/03/09 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
对pandas中Series的map函数详解
2018/07/25 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
CSS3实现时间轴特效
2020/11/02 HTML / CSS
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
家长给老师的道歉信
2014/01/13 职场文书
检讨书范文
2015/01/27 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
用JS写一个发布订阅模式
2021/11/07 Javascript