用gdal校正遥感影像

目录

  • 代码示例
  • 有相应的RPC文件
  • 用gdal命令行校正

使用 gdal.Warp函数可以非常方便对遥感影像进行正射校正,这个过程需要我们确定目标影像的几何信息,包括坐标系、分辨率以及需要配准到的区域或基准影像

代码示例

以下是一个使用gdal.Warp配准影像的基本Python示例:

from osgeo import gdal# 输入和输出文件路径
input_file_path = '/path/to/your_input_image.tif'  # 要配准的影像
output_file_path = '/path/to/your_output_image.tif'  # 配准后的输出影像
base_file_path = '/path/to/your_base_image.tif'  # 基准影像(如果需要配准到特定的基准影像)# 打开基准影像文件获取其投影和地理变换信息
base_dataset = gdal.Open(base_file_path)
base_projection = base_dataset.GetProjection()
base_geo_transform = base_dataset.GetGeoTransform()
base_x_size = base_dataset.RasterXSize
base_y_size = base_dataset.RasterYSize
base_dataset = None  # 关闭基准影像# 使用gdal.Warp函数进行配准
warp_options = gdal.WarpOptions(format='GTiff',outputBounds=base_geo_transform,  # 输出图像的边界(可选,如果您希望输出影像与基准影像边界一致)xRes=base_geo_transform[1],  # 基准影像的X方向分辨率yRes=-base_geo_transform[5],  # 基准影像的Y方向分辨率(注意负号,因为GeoTransform的第六个参数通常是负的)dstSRS=base_projection,  # 目标坐标系统resampleAlg=gdal.GRA_Bilinear  # 重采样算法,这里使用双线性插值
)# 执行配准
gdal.Warp(destNameOrDestDS=output_file_path, srcDSOrSrcDSTab=input_file_path, options=warp_options)

在这个脚本中,我们首先从基准影像中获取所需的空间参考信息,然后使用这些信息设置gdal.WarpOptionsgdal.Warp函数使用这些选项将输入影像配准到基准影像的空间参考下。

请确保将 /path/to/your_input_image.tif、/path/to/your_output_image.tif 和 /path/to/your_base_image.tif 替换为实际文件路径。

此脚本假设有一个基准影像来提供配准的参考。如果没有基准影像而是有目标的分辨率和坐标系,可以直接在gdal.WarpOptions中指定这些值。

有相应的RPC文件

如果您有相应的RPC文件,那么可以使用GDALgdalwarp命令或者Python API来进行基于RPC的正射校正。以下是如何使用GDAL Python进行操作的示例:

from osgeo import gdal# 输入和输出文件路径
input_tif_path = '/path/to/your_input_image.tif'  # 影像文件
input_rpc_path = '/path/to/your_input_image_rpc.txt'  # RPC文件路径
output_tif_path = '/path/to/your_output_ortho_image.tif'  # 正射校正后的输出影像# 加载原始影像和RPC信息
src_ds = gdal.Open(input_tif_path)# 如果RPC信息不在TIFF的元数据中,可以从外部RPC文件加载
if not src_ds.GetMetadata('RPC'):src_ds.SetMetadata(gdal.Open(input_rpc_path).GetMetadata('RPC'), 'RPC')# 设置正射校正选项
warp_options = gdal.WarpOptions(format='GTiff',rpc=True,resampleAlg=gdal.GRA_Bilinear,  # 可以选择不同的重采样算法dstSRS='EPSG:4326'  # 输出的SRS,根据需要更改,这里使用WGS84
)# 执行正射校正
gdal.Warp(destNameOrDestDS=output_tif_path, srcDSOrSrcDSTab=src_ds, options=warp_options)# 关闭数据集
src_ds = None

在这个脚本中,我们首先打开TIFF文件,并检查其元数据中是否包含RPC信息。如果不包含,我们尝试从外部RPC文件中加载它。然后我们设置gdal.WarpOptions,启用RPC并执行正射校正。

用gdal命令行校正

当然,也可以使用GDAL命令行工具gdalwarp来进行基于RPC的正射校正。如果您的TIFF影像和 RPC 文件是分开的,需要确保RPC文件与TIFF文件同名,并且在同一文件夹中,GDAL才能自动识别并应用RPC信息。

以下是使用gdalwarp进行RPC正射校正的命令行示例:

gdalwarp -rpc -t_srs EPSG:4326 input.tif output.tif

在这个命令中:

  • rpc 标志告诉 GDAL 使用 TIFF 影像文件中的 RPC 信息。
  • t_srs EPSG:4326 指定目标空间参考系统,这里使用的是 WGS84。如果想要投影到不同的坐标系,请更改为相应的 EPSG 代码。
  • input.tif是原始影像文件。
  • output.tif是正射校正后将生成的 TIFF 文件。
    确保替换 input.tif 和 output.tif 为实际的文件名。

如果RPC信息不在 TIFF 文件中,而是在单独的.rpc文件中,确保 .rpc 文件与 TIFF 文件同名并位于相同的目录下。GDAL 会自动查找并应用这些 RPC 信息。

在运行这个命令之前,请确保已经安装了 GDAL。在 Windows 中,可以使用或者通过Conda安装 GDAL :

conda install -c conda-forge gdal

在运行命令之前,最好是先检查TIFF文件和RPC文件确保它们是匹配的,以及RPC数据是有效的。

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

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

相关文章

matlab科学计算

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

【4】基于多设计模式下的同步异步日志系统-框架设计

7. 日志系统框架设计 本项⽬实现的是⼀个多日志器日志系统,主要实现的功能是让程序员能够轻松的将程序运行日志信息落地到指定的位置,且⽀持同步与异步两种方式的日志落地方式。 项目的框架设计将项目分为以下几个模块来实现。 日志等级模块 日志等级模…

如何进行卷积特征可视化

大家好啊,我是董董灿。 之前写过很多关于卷积算法的文章:5分钟理解什么是卷积的特征提取。总的来说,卷积算法的本质是一个特征提取器。 那么既然卷积神经网络在图像分类、图像检测、图像分割以及其他领域有这么好的表现,卷积到底…

苍穹外卖--销量排名Top10

销量排名Top10 需求分析和设计 产品原型 所谓销量排名,销量指的是商品销售的数量。项目当中的商品主要包含两类:一个是套餐,一个是菜品,所以销量排名其实指的就是菜品和套餐销售的数量排名。通过柱形图来展示销量排名&#xff…

【动手学深度学习】(六)权重衰退

文章目录 一、理论知识二、代码实现2.1从零开始实现2.2简洁实现 【相关总结】 主要解决过拟合 一、理论知识 1、使用均方范数作为硬性限制(不常用) 通过限制参数值的选择范围来控制模型容量 通常不限制偏移b 小的意味着更强的正则项 使用均方范数作为柔…

多项式拟合求解

目录 简介 基本原理 例1 例2 例3 参考资料 简介 多项式拟合可以用最小二乘求解,不管是一元高阶函数,还是多元多项式函数,还是二者的混合,都可以通过统一的方法求解。当然除了最小二乘法,还是其他方法可以求解&…

极兔速递查询,极兔速递单号查询,根据更新量筛选出来需要的单号

批量查询极兔速递单号的物流信息,并根据物流更新量将需要的单号筛选出来。 所需工具: 一个【快递批量查询高手】软件 极兔速递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,第一次使用的伙伴记得先注册&…

express搭建后台node接口

在前端的学习中我们使用express来开发接口结合mysql,然后使用可视化的数据库工具来操作数据, web框架是express 文档是jsdoc swagger 数据库模型是sequelize 部署使用PM2来上服务器, 打包你也可以结合webpack配置target node状态 当然你也可以…

糟了,数据库崩了,又好像没崩

前言 2023 年某一天周末,新手程序员小明因为领导安排的一个活来到公司加班,小明三下五除二,按照领导要求写了一个跑批的数据落库任务在测试环境执行 ,突然间公司停电了,小明大惊,“糟了,MySQL …

cc-product-waterfall仿天猫、淘宝购物车店铺商品列表组件

cc-product-waterfall仿天猫、淘宝购物车店铺商品列表组件 引言 在电商应用中,购物车体验的优化对于提升用户满意度和转化率至关重要。在本文中,我们将深入探讨如何使用cc-product-waterfall组件,结合uni-number-box和xg-widget,…

【Linux】统计文件数量:ls -l | grep ^- | wc -l

统计文件数量:ls -l | grep ^- | wc -l ✅ 查看某文件夹下 文件 的个数(不包含子目录中的文件)(因为目录的权限首字母为 d:代表文件夹) ls -l | grep ^- | wc -lls -l:列出当前目录下所有文件&…

frida - 4.hook结合python调用

使用Python注入Frida主要有以下几种模式: Spawn 模式:在目标设备上启动一个新的应用程序进程,并在该进程中运行Frida脚本。这种模式 非常适用于对未安装的应用程序进行注入。 Attach 模式:在目标设备上附加到已经运行的应用程序进程,并在该进程中运行Frida脚本。这种 模式非常…

C++-如何避免内存泄漏

目录 一.内存泄漏 1.什么是内存泄漏,内存泄漏的危害 2.内存泄漏分类 3.如何检测内存泄漏 4.如何避免内存泄漏 一.内存泄漏 1.什么是内存泄漏,内存泄漏的危害 什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存…

速速收藏!纯C实现的MD5哈希校验算法~!

速速收藏!纯C实现的MD5哈希校验算法~! 只有一个函数: void MD5(const void* buf, unsigned int len, unsigned char output[16]); 在线验证网站:https://www.sojson.com/md5/ 头文件 /*** \file md5.h** \brief MD5 message dig…

软著项目推荐 深度学习手势识别算法实现 - opencv python

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(二)

一、数据控制语言(DCL) 1.1 授权(GRANT) 数据控制语言(DCL)是SQL的一个子集,用于控制数据库中的数据访问和权限。GRANT语句是DCL中的一种,用于向用户或角色授予特定的数据库操作权…

计算机网络 | 物理层下 传输媒介、信道复用技术,带宽接入技术

文章目录 3. 物理层下面的传输媒介3.1 导引型传输媒介3.2 非导引型传输媒介 4 信道复用技术5 数字传输系统5.1 旧的数字系统5.2 新数字系统 6 带宽接入技术6.1 DSL(数字用户线)6.2HFC 光纤同轴混合网6.2.1 接入 6.3 FTTx技术 3. 物理层下面的传输媒介 传…

层规范化(Layer Normalization)和正则化(Regularization)

层规范化(Layer Normalization)和正则化(Regularization)是两个不同的概念,尽管它们都在机器学习和深度学习中非常重要,但它们的目的和应用方式有所不同。 层规范化(Layer Normalization&#x…

KALI LINUX攻击与渗透测试

预计更新 第一章 入门 1.1 什么是Kali Linux? 1.2 安装Kali Linux 1.3 Kali Linux桌面环境介绍 1.4 基本命令和工具 第二章 信息收集 1.1 网络扫描 1.2 端口扫描 1.3 漏洞扫描 1.4 社交工程学 第三章 攻击和渗透测试 1.1 密码破解 1.2 暴力破解 1.3 漏洞利用 1.4 …

嵌入式软件开发常用的关键字和运算符

目录 1、volatile关键字 2、const关键字 3、static关键字 4、struct与union 5、预定义标识符 6、#与## 7、void 与 void*关键字 8、weak关键字 1、volatile关键字 volatile是一个特征修饰符,提醒编译器它后面所定义的变量随时都有可能改变,因此…