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 20 Python
Django的URLconf中使用缺省视图参数的方法
Jul 18 Python
Python下载网络小说实例代码
Feb 03 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
python 阶乘累加和的实例
Feb 01 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
Feb 11 Python
django 扩展user用户字段inlines方式
Mar 30 Python
django model通过字典更新数据实例
Apr 01 Python
如何利用Python写个坦克大战
Nov 18 Python
5道关于python基础 while循环练习题
Nov 27 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 移除数组重复元素的一点说明
2008/11/27 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
laravel 数据验证规则详解
2019/10/23 PHP
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
在漏洞利用Python代码真的很爽
2007/08/26 Python
python 合并文件的具体实例
2013/08/08 Python
python发送邮件功能实现代码
2016/07/15 Python
快速了解Python中的装饰器
2018/01/11 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
自学python的建议和周期预算
2019/01/30 Python
详解Python3注释知识点
2019/02/19 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
银行实习生的自我评价
2014/01/13 职场文书
最常使用的求职信
2014/05/25 职场文书
批评与自我批评范文
2014/10/15 职场文书
小学科学课教学反思
2016/02/23 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis