计算无人机俯拍图像的地面采样距离(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矩阵,为方便理解进行了分段上色

GSD 矩阵的实际应用

3.1 面积测量

在遥感分析中,常常需要计算某个区域的面积。例如,结合分割算法将作物区域提取出来后,可以利用 GSD 矩阵将像素面积映射为实际物理面积。

3.2 精确定位与测绘

结合 GSD 矩阵,可以将像素坐标直接映射为实际地理坐标。这在无人机测绘中非常有用,可以高效生成高精度的地理信息图。

总结

本文介绍了如何计算无人机俯拍图像的 GSD 矩阵,并展示了其在面积测量等实际应用中的价值。掌握 GSD 的计算与应用方法,可以帮助我们更好地处理无人机影像数据,提升分析结果的精度与可信度。

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

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

相关文章

浅谈怎样系统的准备前端面试

前言 创业梦碎&#xff0c;回归现实&#xff0c;7 月底毅然裸辞&#xff0c;苦战两个月&#xff0c;拿到了美团和字节跳动的 offer&#xff0c;这算是从业以来第一次真正意义的面试&#xff0c;遇到蛮多问题&#xff0c;比如一开始具体的面试过程我都不懂&#xff0c;基本一直是…

深度学习-74-大语言模型LLM之基于API与llama.cpp启动的模型进行交互

文章目录 1 大模型量化方法1.1 GPTQ(后训练量化)1.2 GGUF(支持CPU)1.3 AWQ(后训练量化)2 llama.cpp2.1 功能2.1.1 Chat(聊天)2.1.2 Completion(补全)2.2 运行开源LLM2.2.1 下载安装llama.cpp2.2.2 下载gguf格式的模型2.2.3 运行大模型3 API访问3.1 调用补全3.2 调用聊天3.3 提取…

sql server 字符集和排序

英文&#xff1a; Latin1_General_CI_AS 中文&#xff1a;Chinese_PRC_CI_AS 影响字符存储&#xff0c;解释用户存在单字节字符类型&#xff08;char&#xff0c;varchar等&#xff09;里面的数据 字符排序规则&#xff08;是否区分大小写等&#xff09; 中国的用户一定要注意…

【docker】列出与特定镜像名相关的镜像

目录 1. 说明2. 列出所有镜像3. 使用镜像名过滤4. 列出特定标签的镜像5. 结合多个过滤条件6. 使用 JSON 格式和 jq 工具 1. 说明 1.在 Docker 中&#xff0c;如果你想列出与特定镜像名相关的镜像&#xff0c;可以使用 docker images 命令并结合过滤选项&#xff08;如 --filte…

Elasticsearch 实战应用:开启数据搜索与分析新征程

在当今信息爆炸的时代&#xff0c;高效的数据搜索与分析能力成为众多企业和开发者追求的目标。Elasticsearch 作为一款强大的分布式搜索和分析引擎&#xff0c;正逐渐成为数据处理领域的核心工具之一。在我们的教学过程中&#xff0c;旨在让学生深入理解并熟练掌握 Elasticsear…

Navicat 17 功能简介 | SQL 美化

SQL美化 本期&#xff0c;我们将深入挖掘 Navicat 的实用的SQL代码美化功能。你只需简单地点击“SQL 美化”按钮&#xff0c;即可轻松完成 SQL 的格式化。 随着 17 版本的发布&#xff0c;Navicat 也带来了众多的新特性&#xff0c;包括兼容更多数据库、全新的模型设计、可视化…

2009 ~ 2019 年 408【数据结构】大题解析

2009 年 讲解视频推荐&#xff1a;【BOK408真题讲解-2009年&#xff08;催更就退网版&#xff09;】 1. 图的应用&#xff08;10’&#xff09; 带权图&#xff08;权值非负&#xff0c; 表示边连接的两顶点间的距离&#xff09;的最短路径问题是找出从初始顶点到目标顶点之间…

时空AI赋能低空智能科技创新

随着人工智能技术的不断进步&#xff0c;时空人工智能&#xff08;Spatio-Temporal AI&#xff0c;简称时空AI&#xff09;正在逐渐成为推动低空经济发展的新引擎。时空AI结合了地理空间智能、城市空间智能和时空大数据智能&#xff0c;为低空智能科技创新提供了强大的数据支持…

SamOut 任意长度推理空间不变

项目地址 import numpy as np import pandas as pd import torch from tqdm import tqdmfrom infer_model import SamOutdef load_model_and_voc(device"cpu"):voc pd.read_pickle("total_voc.pkl")net SamOut(len(voc["voc"]), 1024 512, 64…

17.springcloud_openfeign之扩展组件一

文章目录 一、前言二、默认约定配置FeignAutoConfigurationCachingCapabilityFeignCachingInvocationHandlerFactoryFeignJacksonConfiguration熔断器配置FeignCircuitBreakerTargeterFeignCircuitBreaker.Builder FeignClientsConfigurationCircuitBreakerFactory 总结 一、前…

Python读取Excel批量写入到PPT生成词卡

一、问题的提出 有网友想把Excel表中的三列数据&#xff0c;分别是&#xff1a;单词、音标和释义分别写入到PPT当中&#xff0c;每一张PPT写一个单词的内容。这种批量操作是python的强项&#xff0c;尤其是在办公领域&#xff0c;它能较好地解放双手&#xff0c;读取Excel表后…

Proteus(8.15)仿真下载安装过程(附详细安装过程图)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、Proteus是什么&#xff1f; 二、下载链接 三、下安装步骤 1.解压&#xff0c;有键管理员运行 2.点击Next&#xff0c;进行下一步 3.勾选I accept…&#…

防止私接小路由器

电脑获取到IP地址不是DHCP服务器的IP地址段&#xff0c;导致整个公司网络瘫痪&#xff0c;这些故障现象通常80%原因是私接小路由器导致的&#xff0c;以下防止私接小路由器措施。 一、交换机配置DHCP Sooping DHCP snooping是一种DHCP安全特性&#xff0c;用于防止非法设备获…

动态导出word文件支持转pdf

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、功能说明二、使用步骤1.controller2.工具类 DocumentUtil 导出样式 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff…

紧固件设计之——开槽六角头防脱出杆螺栓仿真APP

按照产品形态分类&#xff0c;紧固件通常包括以下12类&#xff1a;螺栓、螺柱、螺钉、螺母、自攻螺钉、木螺钉、垫圈、挡圈、销、铆钉、焊钉、组合件与连接副&#xff0c;是一类用于连接和固定各种构件和零部件的重要机械零件&#xff0c;可确保机械装置或设备结构的牢固和稳定…

【Python装饰器】编写一个装饰器,并将其放到适当的位置,目的是让代码 1 秒钟打印一个结果

import timedef fib():back1, back2 0, 1def func():nonlocal back1, back2back1, back2 back2, back1 back2print(back1, end )return funcdef get_fib(n):f fib()for i in range(n):f()n int(input("请输入需要获取的斐波那契数&#xff1a;"))get_fib(n) imp…

mysql中与并发相关的问题?

今天我们来聊聊 MySQL 中与并发相关的一些问题。作为一名资深 Python 开发工程师&#xff0c;我觉得这些问题不仅关乎数据库的稳定性和数据的一致性&#xff0c;更与我们的代码实现和业务逻辑密切相关。 尤其是在高并发环境下&#xff0c;如何保证数据的一致性&#xff0c;如何…

【Mac】安装 PaddleOCR

环境&#xff1a;Mac M1 芯片 1、安装 Anaconda 安装较为简单&#xff0c;直接在 Anaconda 官网 下载pkg文件&#xff0c;根据向导提示完成安装。 Anaconda 用于搭建 Python 虚拟环境&#xff0c;目的是为了避免与之前环境安装库的版本冲突&#xff0c;另外 paddle 对Python…

使用k6进行kafka负载测试

1.安装环境 kafka环境 参考Docker搭建kafka环境-CSDN博客 xk6-kafka环境 ./xk6 build --with github.com/mostafa/xk6-kafkalatest 查看安装情况 2.编写脚本 test_kafka.js // Either import the module object import * as kafka from "k6/x/kafka";// Or in…

服务器ip:port服务用nginx 域名代理

ubuntu 1、安装nginx # 更新软件包列表 sudo apt update# 安装Nginx sudo apt install nginx -y# 检查Nginx状态 sudo systemctl status nginx2、创建存放域名 SSL证书的目录 # 创建目录 sudo mkdir -p /etc/nginx/ssl# 复制证书文件到该目录 sudo cp play.cn_bundle.crt /et…