目录

背景

算法思路

代码实现

验证


背景

        在城市交通巡检中如何进行车辆违停判断很重要,一个方法是通过精确坐标判断车辆中心是否位于违停框中,我们假设无人机坐标已知,并且无人机云台镜头垂直地面朝下,可根据图像分辨率、无人机参数、无人机坐标、识别目标位置等信息,解算出识别目标的具体坐标。

无人机采用大疆机场 2 自带的 Matrice3TD 无人机,参数如下:

水平视场角:84 °

图像分辨率:800 X 600

无人机自带 RTK ,实时测定无人机当前坐标信息,包括经度纬度相对高度以及航向角

算法思路

        通过水平视场角和高度计算出影像实际长度,再由实际长度和影像分辨率计算单个栅格长度,再由yolo 目标识别矩形框计算中心栅格坐标,并计算与无人机地面投影点的栅格坐标差,从而计算实际矢量坐标差,再由航向角计算出目标中心最终坐标。

简要解算:

注意,本算法仅考虑无人机镜头垂直朝下的情况!!!

代码实现

参数定义:

# 参数
Horizontal_view = 84  # 无人机水平视场角
Resolution_X = 800   # X 轴栅格数
Resolution_Y = 600   # Y 轴栅格数
R = 6371000  # 地球半径(米)

获取单个像素长度:

def calculate_pixel_length(h):"""计算像素长度:param h: 无人机相对高度(米):return: 像素长度(米)"""# 计算水平视场角的一半half_horizontal_view = Horizontal_view / 2.0# 图像长度l = 2.0 * h * math.tan(math.radians(half_horizontal_view))distance = l / Resolution_Xreturn distance

可利用水平视场角、分辨率和高度 h 计算

解算目标坐标:

def calculate_target_coordinates(x1, y1, x2, y2, heading_angle, longitude, latitude, h):"""计算目标坐标,仅考虑目标位于北半球、东半球:param x1: 目标左上角 X 轴像素位置:param y1: 目标左上角 Y 轴像素位置:param x2: 目标右下角 X 轴像素位置:param y2: 目标右下角 Y 轴像素位置:param heading_angle: 无人机航向角(度):param longitude: 无人机经度(度):param latitude: 无人机纬度(度):param h: 无人机相对高度(米):return: 目标坐标 (x, y)"""pixel_length = calculate_pixel_length(h)# 目标中心点像素坐标target_x = (x1 + x2) / 2.0target_y = (y1 + y2) / 2.0# 无人机像素中心坐标drone_x = Resolution_X / 2.0drone_y = Resolution_Y / 2.0# 计算相对于中心点的像素位移,yolo 识别输出图像的坐标轴向下为 y 轴增加,需反转,不然后面坐标系无法转换raster_dx = target_x - drone_xraster_dy = drone_y - target_y# 实际距离vector_dx = raster_dx * pixel_lengthvector_dy = raster_dy * pixel_length# 图像坐标系转为地理坐标系,计算地理坐标系的分量,可理解为将图像坐标系逆时针旋转到与地理坐标系重合dx = vector_dx * math.cos(math.radians(heading_angle)) - vector_dy * math.sin(math.radians(heading_angle))dy = vector_dx * math.sin(math.radians(heading_angle)) + vector_dy * math.cos(math.radians(heading_angle))# 解算坐标,一纬度约为111km,一经度则还需乘cos(纬度)target_lon = longitude + (180 / math.pi) * (dx / (R * math.cos(latitude)))target_lat = latitude + (180 / math.pi) * (dy / R)# 返回目标坐标return target_lon, target_lat

        计算出目标相对于中心点的位移后,需要将 y 轴反转,因为图像 y 轴正方向是朝下的,与地理坐标系相反,然后再将图像坐标系作坐标系的旋转,旋转到地理坐标系上,从而能计算出目标点位移对于地理坐标系的分量,从而解算目标点坐标。

验证

if __name__ == '__main__':x, y = calculate_target_coordinates(10, 20, 20, 30, 20, 115.89, 28.68, 5)print(f"Target Coordinates: Longitude={x}, Latitude={y}")

输出结果:

大家可以自行验证下,理论上是没有问题的。

至于调用,在 yolo 识别后,会输出 bbox 等参数,然后对每个帧循环目标再调用此算法即可。

感谢观看!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90861.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90861.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/90861.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go入门 - day1 - 环境搭建

0. 介绍 go语言可以做什么? a. 区块链 b. 分布式/微服务/云原生 c. 服务器/游戏软件go的优势 a. 代码量比C和Java少 b. 编译速度比Java或者C快上5到6倍,比Scale块10被 c. 性能比C慢20%,但是比Java、python等快上5到10倍 d. 内存管理和C媲美&a…

【华为OD】MVP争夺战(C++、Java、Python)

文章目录题目描述输入描述输出描述示例解题思路算法思路核心步骤代码实现C实现Java实现Python实现算法要点复杂度分析解题总结题目描述 在星球争霸篮球赛对抗赛中,最大的宇宙战队希望每个人都能拿到MVP,MVP的条件是单场最高分得分获得者。可以并列所以宇…

Datawhale 2025 AI夏令营 MCP Server Task2

魔搭MCP &Agent赛事(MCP Server开发)/夏令营:动手开发MCP Server学习链接:魔搭MCP &Agent赛事(MCP Server开发) - Datawhale Task1回顾 1.task1应用功能 luner_info每日黄历 这是一个可以获取某天…

敏捷开发方法全景解析

核心理念:敏捷开发是以快速响应变化为核心的项目管理方法论,通过迭代式交付、自组织团队和持续反馈,实现高质量软件的高效交付。其本质是拥抱变化优于遵循计划,强调"可工作的软件高于详尽的文档"。 一、敏捷核心思想体系 #mermaid-svg-y7iyWsQGVWn3IpEi {font-fa…

Socket到底是什么(简单来说)

简单来说: Socket 抽象了网络通信的复杂底层细节,让应用程序开发者可以专注于发送和接收数据,而不用去操心数据在网络上是如何传输的。 它就像一个“黑盒子”,你只需要把数据扔进去,或者从里面取数据,至于数…

linux系统mysql性能优化

1、系统最大打开文件描述符数查看限制 ulimit -n更改配置 # 第一步 sudo vim /etc/security/limits.conf* soft nofile 1048576 * hard nofile 1048576# 第二步 sudo vim /etc/sysctl.conffs.file-max 1048576# 第三步(重启系统) sudo reboot验证生效 u…

免费的需要尝试claude code的API安利,截至今天可用(7月13号)

安装方法放最后(很简单,但是你得搞定网络) 注册如下: 链接如下(有详细说明): 🚀 AnyRouter|Claude Code 免费共享平台 安装(windows用户特殊点&#xff0…

Java 属性配置文件读取方法详解

Java 属性配置文件读取方法详解 一、配置文件基础概念 1. 配置文件类型对比类型格式优点缺点适用场景Propertieskeyvalue简单易读,Java原生支持不支持层级结构简单配置,JDBC参数XML标签层级结构结构化强,支持复杂数据类型冗余,解析…

NW728NW733美光固态闪存NW745NW746

美光NW系列固态闪存深度解析:NW728、NW733、NW745与NW746的全方位评测技术架构与核心创新美光NW系列固态闪存(包括NW728、NW733、NW745、NW746)的技术根基源于其先进的G9 NAND架构。该架构通过5纳米制程工艺和多层3D堆叠技术,在单…

【面试八股文】2025最新软件测试面试

一、测试基础 1、测试策略或测试包括哪些,测试要覆盖哪些方面 UI、功能、性能、可靠性、易用性、兼容性、安全性、安装卸载 2、设计测试用例的办法 等价类、边界值、错误推测法、场景法等设计方法来编写测试用例的 (1)等价类分为有效等价…

AI软件出海SEO教程

一、出海SEO核心思路 本地化:内容、技术、用户体验全面适应目标市场。关键词策略:围绕目标用户的真实搜索习惯做关键词挖掘和布局。内容为王:持续输出高质量、解决用户痛点的内容。技术优化:保证网站速度、结构、移动端体验及安全…

PyVision:基于动态工具的具身智能体

论文地址: [2507.07998v1] PyVision: Agentic Vision with Dynamic Tooling 1. 背景 现有的智能体一般都是通过大模型规划调用已经预定义好的一些工具(具体来说也就是一些函数)来解决问题。这样就会导致在针对特征的任务上Agent去解决问题…

Higress 上架 KubeSphere Marketplace,助力企业构建云原生流量入口

随着企业数字化转型持续深化,云原生架构正逐渐成为构建现代应用的主流选择。而服务治理作为云原生落地的核心能力之一,急需更灵活、高效的解决方案。近日,AI 原生的 API 网关 Higress 正式上架 KubeSphere Marketplace,助力用户轻…

在LC480T上部署xapp1052

实验环境:LC480T加速卡 开发环境:windows11vivado2020 运行环境:ubuntu22.04 硬件电路:LC480T加速卡(xc7k480tffg1156-2) vivado工程文件下载:https://download.csdn.net/download/xiaolangyangyang/91349686 驱动及应…

TCP的socket编程

TCP客户端逻辑void Usage(const std::string & process) {std::cout << "Usage: " << process << " server_ip server_port" <<std::endl; } // ./tcp_client serverip serverport int main(int argc, char * argv[]) {if (ar…

【理念●体系】模板规范篇:打造可标准化复用的 AI 项目骨架

【理念●体系】从零打造 Windows WSL Docker Anaconda PyCharm 的 AI 全链路开发体系-CSDN博客 【理念●体系】Windows AI 开发环境搭建实录&#xff1a;六层架构的逐步实现与路径治理指南-CSDN博客 【理念●体系】路径治理篇&#xff1a;打造可控、可迁移、可复现的 AI 开…

Skia---渐变色着色器

今天介绍的是实际工作中最常用到的着色器&#xff1a;渐变色着色器。 渐变色着色器是一个从一种颜色平滑的过渡到另一种颜色的效果&#xff0c;渐变色着色器的作用主要是增强图形的视觉吸引力。 线性渐变 Skia 里的线性渐变色着色器是最简单的渐变色着色器&#xff0c;它用于…

2025.07.09华为机考真题解析-第二题200分

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 地铁线路故障预警系统 问题描述 LYA 负责管理一个城市的地铁网络系统。地铁网络由 n n n

数学建模:非线性规划:凸规划问题

一、定义凸集定义​​&#xff1a;设Ω是n维欧氏空间的一点集&#xff0c;若任意两点x₁∈Ω&#xff0c;x₂∈Ω&#xff0c;其连线上的所有点αx₁(1-α)x₂∈Ω&#xff0c;(0≤α≤1)&#xff0c;则称Ω为凸集。​​凸函数定义​​&#xff1a;给定函数f(x)(x∈D⊂Rⁿ)&…

ISIS | 广播网络中的 ISIS 伪节点 LSP

注&#xff1a;本文为 “ISIS | 伪节点 LSP” 相关合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;略作重排。 如有内容异常&#xff0c;请看原文。 ISIS in Broadcast Network and Pseudonode LSP 广播网络中 的 ISIS 伪节点 LSP ISIS in broadcast network is…