计算无人机俯拍图像的地面采样距离(GSD)矩阵
引言
在无人机遥感、测绘和精细农业等领域,地面采样距离(Ground Sampling Distance,简称 GSD)是一个非常重要的指标。GSD 是指图像中每个像素在地面上实际代表的物理距离,通常以米或厘米为单位。GSD 决定了图像的空间分辨率,直接影响到后续的分析结果,比如分割对象的精度、目标检测的准确性以及面积测量的精度。
在本篇文章中,我们将介绍如何计算无人机俯拍图像的 GSD 矩阵,并探讨其在实际应用中的价值。
背景和应用场景
1.1 什么是 GSD?
GSD 是衡量图像空间分辨率的核心指标。对于一个无人机拍摄的影像,GSD 通常由以下因素决定:
- 图像传感器大小:传感器越大,单个像素接收到的地面信息越多。
- 飞行高度:飞行高度越高,每个像素对应的地面范围越大,但空间分辨率相对降低。
- 相机焦距:焦距越长,地面范围缩小,从而提高分辨率。
- 图像尺寸:图像的分辨率(像素宽度与高度)也会影响每个像素所覆盖的地面范围。
1.2 GSD 的实际意义
GSD 在许多应用场景中都有重要意义:
- 目标检测与分割:通过 GSD,可以将像素级的分割结果转化为实际的物理尺寸。例如,在精细农业中,通过分割作物的区域并结合 GSD,可以精确计算每块地的作物面积。
- 精确测量:在无人机航拍的测绘中,GSD 决定了测量地物(如建筑物、道路、土地分块等)大小的精度。
- 多尺度分析:结合 GSD,可以实现不同尺度图像的对比分析,便于对某一区域的精细解读。
GSD 矩阵的计算
import numpy as npdef calculate_gsd_matrix(image_height: int, image_width: int, sensor_height: float, sensor_width: float, focal_length: float,flying_height: float, pitch_angle: float) -> np.ndarray:"""计算无人机拍摄的图像每个像素的地面采样距离(GSD)矩阵。Args:image_height: 图像高度(像素)。image_width: 图像宽度(像素)。sensor_height: 相机传感器高度(毫米)。sensor_width: 相机传感器宽度(毫米)。focal_length: 相机焦距(毫米)。flying_height: 无人机飞行高度(米)。pitch_angle: 相机俯仰角(度)。Returns:代表每个像素 GSD 的 2D numpy 数组。"""# 预先计算的常量pixel_size_height = sensor_height / image_heightpixel_size_width = sensor_width / image_widthhorizontal_gsd_height = (flying_height * pixel_size_height) / focal_lengthhorizontal_gsd_width = (flying_height * pixel_size_width) / focal_length# 计算垂直视场角(VFOV)和水平视场角(HFOV)vfov = 2 * np.arctan(sensor_height / (2 * focal_length))hfov = 2 * np.arctan(sensor_width / (2 * focal_length))# 计算每个像素的俯仰角和翻滚角pixel_angles_v = ((np.arange(image_height) - image_height / 2) / image_height) * np.degrees(vfov) + pitch_anglepixel_angles_h = ((np.arange(image_width) - image_width / 2) / image_width) * np.degrees(hfov)# 应用无效角度的掩码invalid_mask_v = (pixel_angles_v > 90) | (pixel_angles_v < -90)invalid_mask_h = (pixel_angles_h > 90) | (pixel_angles_h < -90)# 计算垂直和水平 GSDrow_gsd = horizontal_gsd_height / np.cos(np.radians(pixel_angles_v))col_gsd = horizontal_gsd_width / np.cos(np.radians(pixel_angles_h))# 设置无效 GSD 为 nanrow_gsd[invalid_mask_v] = np.nancol_gsd[invalid_mask_h] = np.nan# 结合垂直和水平 GSDgsd_matrix = np.outer(row_gsd, np.ones(image_width))return gsd_matrix
我们可以利用上述函数计算 GSD 矩阵:
# 示例参数
image_height = 3000
image_width = 4000
sensor_height = 8.8 # mm
sensor_width = 13.2 # mm
focal_length = 8.0 # mm
flying_height = 120.0 # m
pitch_angle = 0.0 # degrees# 计算 GSD 矩阵
gsd_matrix = calculate_gsd_matrix(image_height, image_width, sensor_height, sensor_width,focal_length, flying_height, pitch_angle)print("GSD 矩阵计算完成,矩阵尺寸为:", gsd_matrix.shape)
可视化的GSD矩阵如下:

GSD 矩阵的实际应用
3.1 面积测量
在遥感分析中,常常需要计算某个区域的面积。例如,结合分割算法将作物区域提取出来后,可以利用 GSD 矩阵将像素面积映射为实际物理面积。
3.2 精确定位与测绘
结合 GSD 矩阵,可以将像素坐标直接映射为实际地理坐标。这在无人机测绘中非常有用,可以高效生成高精度的地理信息图。
总结
本文介绍了如何计算无人机俯拍图像的 GSD 矩阵,并展示了其在面积测量等实际应用中的价值。掌握 GSD 的计算与应用方法,可以帮助我们更好地处理无人机影像数据,提升分析结果的精度与可信度。
相关文章:
计算无人机俯拍图像的地面采样距离(GSD)矩阵
引言 在无人机遥感、测绘和精细农业等领域,地面采样距离(Ground Sampling Distance,简称 GSD)是一个非常重要的指标。GSD 是指图像中每个像素在地面上实际代表的物理距离,通常以米或厘米为单位。GSD 决定了图像的空间…...
牛客网 SQL37查找多列排序
SQL37查找多列排序 select device_id,gpa,age from user_profile order by gpa asc,age asc#select [字段1,字段2] from [表名] order by [字段1] [升序(asc)/降序(desc)],[字段2] [升序(asc)/降序(desc)] #select:查询 #order by 排序 每日问题 如何处理对象的状…...
el-tabs标签过多
tab-position:top情况 .el-tabs__nav-wrap{overflow-x: auto ;width: 86% ;margin-left: 10px ; } 效果: tab-position:left情况 .el-tabs__nav-wrap{overflow-x: auto ;height: 高度 ;margin-top: 10px ; } 效果: 注意&…...
如何制作搞笑配音视频?操作方法
在数字娱乐盛行的今天,搞笑配音视频凭借其独特的幽默感和创意,在网络上赢得了大量观众的喜爱。如果你也想尝试制作一部让人捧腹的搞笑配音视频,那么请跟随以下步骤,从撰写搞笑文案到视频配音剪辑,一步步打造你的作品。…...
[Unity]Unity跨平台开发之针对Android开发
用户手册的这一部分包含Android平台关于输入(input)、资产管理(asset management)和调试(debugging)等相关主题的开发信息。 Android移动脚本编写 注意:安卓可以在C#中使用UNITY_ANDROID来进行…...
ELK部署
背景 很多公司还是在单体项目中苦苦挣扎,没有必要上elk系统,大家都懂的一个原则系统的技术栈越多系统越复杂,维护起来也越麻烦,在没有大流量高并发的情况下我们就用单体服务挺舒服。我们行业的特殊性做的都是BTB的项目࿰…...
ELK系列-(四)轻量级的日志收集助手-Beat家族
一、前文回顾 ELK系列-(一)Docker部署ELK核心组件 ELK系列-(二)LogStash数据处理的瑞士军刀 ELK系列-(三)Kibana 数据可视化的艺术家 关于部署的整体架构欢迎大家回到前面的文章观看,此处&a…...
NodeJs-包管理工具
包英文单词是 package ,代表了一组特定功能的源码集合 管理包的应用软件,可以对包进行 下载安装 , 更新 , 删除 , 上传 等操作 借助包管理工具,可以快速开发项目,提升开发效率 前端常用的包管理…...
AWR microwave office 仿真学习(二)使用多层结构天线/超表面的S参数确定层间距
引言 如果大家有看过一些多层天线或超表面的论文,有两种比较常用的分析方法,等效电路法和传输线分析法,这两种方法都是三维结构的电磁问题转换为二维/集总的电路问题。本文就介绍根据这种思想进行多层结构优化的一种方法:在AWR软件中根据单层结构的S参数,确定最佳层间距。…...
【zlm】 webrtc源码讲解三(总结)
目录 setsdp onwrite 编辑 play 参考 setsdp onwrite play 参考 【zlm】 webrtc源码讲解_zlm webrtc-CSDN博客 【zlm】 webrtc源码讲解(二)_webrtc 源码-CSDN博客...
Springboot+Druid(可切换Hikari)+Mybatis-plus+mysql+hive的多数据源项目配置
1.搭建一个springboot项目,不会的搜一下,很简单这里不做赘述。 2.首先你搭建的springboot能正常启动之后,pom文件添加如下依赖: <dependency><groupId>com.alibaba</groupId><artifactId>druid</arti…...
Git使用步骤
Git 是一个分布式版本控制系统,广泛用于软件开发和其他需要跟踪文件变更的项目。以下是 Git 的基本使用方法和一些常用命令的详细说明。 安装 Git 在大多数操作系统上,你可以通过包管理器安装 Git: Windows: 下载并安装 Git for Windows。…...
Python+OpenCV系列:AI看图识人、识车、识万物
在人工智能风靡全球的今天,用 Python 和 OpenCV 结合机器学习实现物体识别,不仅是酷炫技能,更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入,识别人、动物、车辆及其他物品,让你的程序瞬间具备 AI …...
springboot449教学资源共享平台(论文+源码)_kaic
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统教学资源共享平台信息管理难度大,容错率低&am…...
类OCSP靶场-Kioptrix系列-Kioptrix Level 4
一、前情提要 二、实战打靶 1. 信息收集 1.1. 主机发现 1.2. 端口扫描 1.3.目录遍历 1.4. 敏感信息 2.漏洞发现 2.1.登录框万能密码 2.2.系统用户密码-ssh链接 2.3.mysql-udf提权 一、前情提要 kali黑客-利用searchsploit搜索exp一键化攻击-CSDN博客 一篇文章带你理…...
贪心算法在背包问题上的运用(Python)
背包问题 有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 这就是典型的背包问题(又称为0-1背包问题),也是具体的、没有经过任何延伸的背包问题模型。 背包问题的传统求解方法较为复杂,现定义有一个可以载重为8kg的背…...
POD 存储、PV、PVC
目录 容器如何持久化存储? PV和PVC 为什么不能直接在 Pod 或容器中存储数据? 什么是 PV和 PVC? 可以使用本地磁盘空间创建PV吗? 如何让客户端通过ftp上传到远端服务器的POD里面? 另一个POD想访问ftp的POD里面的…...
C中strlen和sizeof的区别
1、代码如下: #include<stdio.h>int main() {char a[10] { h,e,l,l,0};printf("%d\n",strlen(a));printf("%d\n", sizeof(a));return 0; } 2、运行结果如下:...
WSL2内部的Ubuntu怎么设置网络内桥接模式,弄了好久老是不成功,怎么办?
环境: Win10专业版 WSL2 Ubuntu22.04 问题描述: WSL2内部的Ubuntu怎么设置网络内桥接模式 解决方案: 方法一 1.控制面板开启,Hyper-V 管理器 2.重启电脑 3…创建外部虚拟交换机 打开 Hyper-V 管理器,在右侧操作面板中点击“虚拟交换机管理器”。 选择“创建虚…...
Linux环境下 搭建ELk项目 -单机版练习
前言 ELK 项目是一个由三个开源工具组成的日志处理和分析解决方案,ELK 是 Elasticsearch、Logstash 和 Kibana 的首字母缩写。这个项目的目标是帮助用户采集、存储、搜索和可视化大量的日志和事件数据,尤其是在分布式系统中。下面是每个组件的概述&…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
