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写日志封装类实例
Jun 28 Python
python基于phantomjs实现导入图片
May 13 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
Django框架多表查询实例分析
Jul 04 Python
python实现图片中文字分割效果
Jul 22 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
pytorch之添加BN的实现
Jan 06 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
Django 实现将图片转为Base64,然后使用json传输
Mar 27 Python
利用pyecharts读取csv并进行数据统计可视化的实现
Apr 17 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 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之Memcache学习笔记
2013/06/17 PHP
php 使用array函数实现分页
2015/02/13 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
PHP文件操作详解
2016/12/30 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
2014/10/17 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
vue绑定class与行间样式style详解
2017/08/16 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
Python 项目转化为so文件实例
2019/12/23 Python
Python对excel的基本操作方法
2021/02/18 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
ET Mall东森购物网:东森严选
2017/03/06 全球购物
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
《藏戏》教学反思
2014/02/11 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
养成教育工作总结
2015/08/13 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
优质护理服务心得体会
2016/01/22 职场文书
Django操作cookie的实现
2021/05/26 Python
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js
Python绘制散乱的点构成的图的方法
2022/04/21 Python