python 三边测量定位的实现代码
作者:Answerman33 发布时间:2023-02-03 08:37:31
标签:python,三边测量,定位
定位原理很简单,故不赘述,直接上源码,内附注释。(如果对您的学习有所帮助,还请帮忙点个赞,谢谢了)
#!/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 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,:])
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。
来源:https://blog.csdn.net/weixin_41285821/article/details/80360924
0
投稿
猜你喜欢
- 前言:无意间留意到一个面试题,需求是利用js将手机号中间四位变成*号,简单记录一下。1. 利用字符串的substr方法 substr() 方
- 数独规则数独游戏,经典的为9×9=81个单元格组成的九宫格,同时也形成了3×3=9个小九宫格,要求在81个小单元格中填入数字1~9,并且数字
- 和以往的总监会议一样,在某个新功能的总监级别讨论会上,很多人再次又说出了同样的看法:“我们网站的界面设计太烂了,不好看、不好用、而且很乱”。
- 在官网下载python和pycharm的安装包python: https://www.python.org/downloads/window
- 本文实例讲述了PHP实现的浏览器检查类。分享给大家供大家参考,具体如下:<?php//原作者:epsilon7//SonyMusic(
- 网上看到一个python写的数独,很好玩,分享给大家。import randomimport itertoolsfrom copy impo
- mysql一次插入多条数据:INSERT INTO hk_test(username, passwd) VALUES('qmf2
- 结果然后直接放源码:import cv2 as cvsource = cv.imread("zhaopian.jpg")
- 一、需求说明在Python程序的开发过程中,一些程序需要获取函数或程序的开始时间、结束时间和时间间隔等内容用来分析和处理内容二、需求分析涉及
- 1 安装说明1.1 用到的软件软件版本下载地址linuxUbuntu Server 18.04.2 LTShttps://ubuntu.co
- 分区视图联接来自一组成员的水平分区数据,使数据看起来象来自同一张表。SQL Server 2000 区分本地分区视图和分布式分区视图。在本地
- 什么是deferdefer用来声明一个延迟函数,把这个函数放入到一个栈上, 当外部的包含方法return之前,返回参数到调用方法之前调用,也
- 1.获取页面titletitle:获取当前页面的标题显示的字段from selenium import webdriverimport ti
- 惊现!表面下的隐藏信息——浅谈信息可视化1910年,病卧床上的魏格那(德国气象学家,以“大陆漂移学说”闻名),无意地注视着墙上的世界地图……
- matplotlib中的字体文件被封装在font_manager这个子模块中,fontManager.ttflist这个列表涵盖了所有Mat
- 这篇文章主要介绍了Pycharm debug调试时带参数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- NopCommerce支持灵活的插件机制,所谓Web系统插件,其实也就是可以像原系统的一部分一样使用。Web系统的使用方式就是客户端发送一个
- 在开发的过程中,我们不可避免的会遇到各种各样的编码,解码,或者乱码问题,很多时候,我们可以正常的解决问题,但是说实在的,我们有可能并不清楚问
- 废话不多说了,上代码吧:import threadingimport requestsimport timeimport osclass M
- django中form表单设置action后,点提交按钮是跳转到action页面的,比如设置action为login,网址为192.168.