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 相关文章推荐
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
python距离测量的方法
Mar 06 Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
Dec 26 Python
浅析Django中关于session的使用
Dec 30 Python
详解Django3中直接添加Websockets方式
Feb 12 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
利用Python将多张图片合成视频的实现
Nov 23 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
Dec 31 Python
python 下载文件的几种方式分享
Apr 07 Python
如何基于python实现单目三维重建详解
Jun 25 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实现小型站点广告管理(修正版)
2006/10/09 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
JS查看对象功能代码
2008/04/25 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
浅谈JavaScript 的执行顺序
2015/08/07 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
jQuery给表格添加分页效果
2017/03/02 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
Python下使用Psyco模块优化运行速度
2015/04/05 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
python实现猜拳小游戏
2020/04/05 Python
python程序文件扩展名知识点详解
2020/02/27 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
学前教育专业毕业生自荐信
2013/10/03 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
调解协议书
2014/04/16 职场文书
书法大赛策划方案
2014/06/04 职场文书
财务负责人任命书
2014/06/06 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android