(Python)使用Gdal进行批量的影像RPC正射校正

2023-05-16

使用Python+Gdal进行批量的影像RPC正射校正

文章目录

  • 使用Python+Gdal进行批量的影像RPC正射校正
    • 摘要
    • 方法
      • 实验数据
    • 实现
      • 代码介绍
      • 完整代码
    • 实验结果
      • 代码运行结果
      • 正射校正结果
      • 性能

摘要

遥感影像经常会遇到大批量数据做统一处理的情况,而其影像命名由于其一级产品的生产过程有很强的规律性,天然具备批量处理的潜质。

本次针对带RPC的遥感影像批量处理,借助了Python脚本语言,使用re库(正则表达式)来处理字符串与名称搜索、os库来处理路径和文件遍历、GDAL库来进行RPC模型的正射校正,最终实现了批量正射的效果。

使用的Python及其处理库具有在window和linux等各种平台下具备易部署、易调试、易编译、易移植的特点。

方法

实验数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-buTyiEMJ-1636256458826)(C:\Users\卫少东\Documents\BaiduNetdiskWorkspace\个人文档\博客写作\批量进行RPC矫正\body.assets\image-20211107113200349.png)]

数据组织如下,常见的一级带rpc的产品(rpb亦可),注意一定遥感影像要带有同名“_RPC”或者“_rpc”的有理多项式模型文件:

    目录: D:\欧比特\2\single\6


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2021/11/6     23:10                ortho
-a----         2021/11/4     18:43            777 imagelist.txt
-a----         2021/11/5     16:00       51176986 HHZ3_20201114005237_0007_L1B_B06_CMOS2.tif
-a----         2021/11/5     16:00       51176986 HHZ3_20201114005237_0008_L1B_B06_CMOS2.tif
-a----         2021/11/5     16:00       51176986 HHZ3_20201114005237_0009_L1B_B06_CMOS2.tif
-a----         2021/11/5     16:00       51176986 HHZ3_20201114005237_0010_L1B_B06_CMOS1.tif
-a----         2021/11/5     16:01       51176986 HHZ3_20201114005237_0010_L1B_B06_CMOS3.tif
-a----         2021/11/5     16:01       51176986 HHZ3_20201114005237_0011_L1B_B06_CMOS1.tif
-a----         2021/11/5     16:01       51176986 HHZ3_20201114005237_0011_L1B_B06_CMOS3.tif
-a----         2021/11/3     16:15           6036 HHZ3_20201114005237_0007_L1B_B06_CMOS2_rpc.txt
-a----         2021/11/3     16:15           6036 HHZ3_20201114005237_0008_L1B_B06_CMOS2_rpc.txt
-a----         2021/11/3     16:15           6036 HHZ3_20201114005237_0009_L1B_B06_CMOS2_rpc.txt
-a----         2021/11/3     16:15           6035 HHZ3_20201114005237_0010_L1B_B06_CMOS1_rpc.txt
-a----         2021/11/3     16:15           6037 HHZ3_20201114005237_0010_L1B_B06_CMOS3_rpc.txt
-a----         2021/11/3     16:15           6035 HHZ3_20201114005237_0011_L1B_B06_CMOS1_rpc.txt
-a----         2021/11/3     16:15           6037 HHZ3_20201114005237_0011_L1B_B06_CMOS3_rpc.txt

实现

代码介绍

主要分为三个函数:

  1. 遍历文件夹的遥感影像并生成待处理图像列表和正射之后存放的位置。
  2. 进行批量的正射的组织。
  3. 使用GDAL进行RPC矫正的封装。

完整代码

import os
import re
import numpy as np
from osgeo import gdal
import time

def RPCrect(input,output):
    """
    使用
    :param input:输入原始影像
    :param output:输出正射影像
    """
    dataset = gdal.Open(input, gdal.GA_Update)#读入影像
    rpc = dataset.GetMetadata("RPC")#读入影像,rpc
    dst_ds = gdal.Warp(output, dataset, dstSRS='EPSG:4326',
                       xRes=9.0909090909090909090909090909091e-5,#x方向正射影像分辨率
                       yRes=09.0909090909090909090909090909091e-5, #y方向正射影像分辨率
                       resampleAlg=gdal.GRIORA_Bilinear,#插值方式,默认为最最邻近,我们一般使用双线性
                       rpc=True, #使用RPC模型进行校正
                       transformerOptions=[r'RPC_DEM=E:\全球SRTM_90m\global']#参考DEM
                       )

def PatchGeoRectRPC(dst_list,ortho_list):
    """
    批量的进行正射
    :param dst_list: 待处理的影像列表
    :param ortho_list: 输出正射影像的正射影像列表
    """
    image_dst_list = np.loadtxt(dst_list,'str')
    image_ortho_list = np.loadtxt(ortho_list, 'str')
    tif_tile = re.compile(r'.tif')
    for dst,ortho in zip(image_dst_list,image_ortho_list):
        dst = dst.replace('\n', '')
        ortho = ortho.replace('\n', '')
        RPCrect(dst,ortho)
        print("orthoed the input image.")
    print("Patch ortho finished.")

def GetOrthoImageList(image_dir):
    """
    自动读取影像,获取原始影像列表,建立正射影像的输出位置
    :param image_dir: 待处理影像的文件夹
    """
    image_dir_ortho = image_dir + r'\ortho'
    isExists = os.path.exists(image_dir_ortho)
    # 判断结果
    if not isExists:
        os.makedirs(image_dir_ortho)
        print(image_dir_ortho+' 创建成功')
    else:
        # 如果目录存在则不创建,并提示目录已存在
        print(image_dir_ortho + ' existed')
    tif_tile = re.compile(r'.tif')
    dst_file = image_dir_ortho+ r"\image_list.txt"
    ortho_file =  image_dir_ortho + r"\image_ortho_list.txt"
    f_dst = open(dst_file, 'w')
    f_ortho = open(ortho_file, 'w')
    gDirPath = os.walk(image_dir)  # 文件名迭代器
    for root, dirs, files in gDirPath:
        if files:
            for file in files:
                mo =  tif_tile.search(file)
                if mo:
                    image_dst = root + '\\' + file
                    img_ortho = tif_tile.sub(r'_ortho.tif',file)
                    image_ortho = root + '\\ortho\\' + img_ortho
                    f_dst.write(image_dst+'\n')
                    f_ortho.write(image_ortho + '\n')
    print("Image list created.")

if __name__ == '__main__':

    image_dir = r"D:\欧比特\2\single\28"
    GetOrthoImageList(image_dir)
    dst_list = image_dir + r"\ortho\image_list.txt"
    ortho_list = image_dir + r"\ortho\image_ortho_list.txt"

    start = time.time()#统计运行时间
    PatchGeoRectRPC(dst_list, ortho_list)
    end = time.time()
    print("正射校正运行时间:%.2f秒" % (end - start))

实验结果

代码运行结果

Image list created.
orthoed the input image.
orthoed the input image.
orthoed the input image.
orthoed the input image.
orthoed the input image.
orthoed the input image.
orthoed the input image.
Patch ortho finished.
正射校正运行时间:55.08秒

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JBsKOwab-1636256458828)(C:\Users\卫少东\Documents\BaiduNetdiskWorkspace\个人文档\博客写作\批量进行RPC矫正\body.assets\image-20211107113114383.png)]

正射校正结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PKXovlLB-1636256458830)(C:\Users\卫少东\Documents\BaiduNetdiskWorkspace\个人文档\博客写作\批量进行RPC矫正\body.assets\image-20211107113328675.png)]

性能

在商务本Thinkpad上,校正一张在数秒到十几秒不等,考虑到易用性,性能的要求可以略微宽容;在主机或者性能本上应该具有更好的性能表现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(Python)使用Gdal进行批量的影像RPC正射校正 的相关文章

随机推荐

  • PX4轨迹生成公式推导

    PX4轨迹生成公式推导下载链接 对于多旋翼 飞行任务的时候 通过地面站画出航点 上传给飞控 飞控通过轨迹生成算法生成平滑的目标位置 速度及加速度 给位置控制模块控制飞机的位置 速度及加速度 PX4轨迹生成的方法为 约束加加速度的S型速度曲线
  • 植保无人机航线规划

    最近折腾了植保无人机航线规划的算法 支持任意多边形 不包括自相交多边形 的边界及障碍区域 其中涉及到了多边形内缩外扩 多边形的分解 多边形交集 并集 差集 深度优先搜索 最短路径算法 耗时两个多月 用C 实现整套算法 生成的库在missio
  • 现代控制工程笔记(一)控制系统的状态空间描述

    文章目录 1 基本概念2 系统的状态空间描述状态空间描述框图状态变量选取的非唯一性 3 由系统微分方程列写状态空间表达式一 微分方程中不包含输入函数的导数项相变量法其他方法 xff1a 二 微分方程中包含输入函数的导数项 4 由传递函数列写
  • 百度Apollo 2.0 车辆控制算法之LQR控制算法解读

    百度Apollo 2 0 车辆控制算法之LQR控制算法解读 Apollo 中横向控制的LQR控制算法在Latcontroller cc 中实现 根据车辆的二自由度动力学模型 1 根据魔术公式在小角度偏角的情况下有 轮胎的侧向力与轮胎的偏离角
  • 多传感器融合--MATLAB跟踪器介绍

    多传感器融合 MATLAB跟踪器介绍 MATLAB通过多目标跟踪器可以融合多传感器检测到的目标信息 xff0c 常用到的多目标跟踪器有trackerGNN trackerJPDA trackerTOMHT trackerPHD等 track
  • MATLAB多传感器融合--核心步骤

    MATLAB多传感器融合 核心步骤 MATLAB的多传感器融合的核心步骤在stepImpl函数中实现 xff0c 该函数的输入的跟踪目标和测量的目标的信息 xff0c 输出为证实的真目标信息和处于试探的跟踪目标信息 confirmedTra
  • [新手编译内核]kernel进行编译时提示No rule to make target `menconfig'.

    windows下下载了 linux 2 6 37内核源码 xff0c 拷贝到U盘上 xff0c 通过mount挂载到了虚拟机里的Centos 5 5系统上 通过putty使用host only方式连接到虚拟机 xff0c 进行操作 在 mn
  • 协议和协议栈的区别?

    在通信领域特别是无线通信领域 xff0c 我们经常会听到用到什么协议啊 xff0c 什么协议栈方面的东西 1 首先 xff0c 协议定义的是一些列的通信标注 xff0c 通信的双方需要共同按照这一个标准进行正常的数据收发 xff1b 在计算
  • linux-kernel, bus总线数据结构分析

    设备模型中的三大组件是 xff1a 总线 xff0c 驱动 xff0c 设备 bus driver device 数据结构总览 总线除了一些物理总线的抽象 xff0c 还代表一些虚拟的总线 xff0c 如platform xff0c 所以在
  • JavaScript 猜数字小游戏

    说明 单独创建一个js文件 然后在文件里面写入下列代码 之后在html页面引入该js文件即可 span class token comment 设计并实现 猜数游戏 xff0c 并输出每轮猜数游戏的猜测次数 游戏规则如下 xff1a spa
  • 纯干货:LCD屏和OLED屏的区别?手机屏幕材质各有什么区别?

    纯干货 xff1a LCD屏和OLED屏的区别 xff1f 手机屏幕材质各有什么区别 xff1f 慢慢买比价 已认证的官方帐号 74 人赞同了该文章 今天我就为大家带来一篇纯干货知识点整理 xff0c 关于手机屏幕那点事看完秒懂 以及大家对
  • OpenJDK在OpenHarmony上异常问题分析

    目录 0 前言1 问题日志打印2 报错日志代码分析3 问题解决方案 0 前言 基于OpenHarmony的2022 06 30 master之前版本OpenJDK测试OK xff0c 但是之后版本测试报异常错误 1 问题日志打印 2 报错日
  • vnc viewer远程连接xfce桌面无法打开terminal终端

    这是因为默认的terminal错啦 xff0c 改一下就好 在页面左上角上找到 Appication gt Settings gt Settings Manager gt Preferred Applications gt Utilitie
  • ucosii第一章读书笔记

    第一章 嵌入式操作系统 1 1 计算机操作系统 简介 xff1a 嵌入式操作系统属于操作系统的一种 嵌入式操作系统的概念 xff1a 应用于嵌入式系统的操作系统叫做嵌入式操作系统 操作系统的概念 xff1a 是一种系统软件 作用于硬件和应用
  • ceres中的loss函数实现探查,包括Huber,Cauchy,Tolerant图像实现及源码

    ceres中的loss函数实现探查 xff0c 包括Huber xff0c Cauchy xff0c Tolerant图像实现及源码 各个损失函数的趋势图 xff1a Ceres内嵌的loss functions原理 xff1a 以Cauc
  • 使用自己的INDEMIND相机来运行ORBSLAM2单目,双目和深度模式(小觅相机和realsense通用)

    流程一览 配置ROSROS环境准备 以 xff11 6 04 ROS Kinetic为例 创建自己的工作空间 配置ORBSLAM编译ORBSLAM2 ROS常见错误及解决运行build ros sh时出现问题一 运行build ros sh
  • 超详细中文车牌识别开源库EasyPR入门实战(win10_VS2019_opencv34)

    中文车牌识别库EasyPR配置全过程及编译问题解决 xff08 win10 VS2019 opencv34 xff09 本文目录 中文车牌识别库EasyPR配置全过程及编译问题解决 xff08 win10 VS2019 opencv34 x
  • (Python)使用Gdal+opencv读遥感影像加简单处理

    文章目录 简介代码运行结果 简介 使用Python API的gdal和opencv一般遇到最大的问题就是 xff0c 遥感影像一般为16位和opencv只处理8位 xff0c 中间的转换有很多的写的非常复杂又不完全对的 xff0c 本文提供
  • (Python)Gdal与Opencv遥感影像Sift匹配+RANSAC筛选并计算匹配RMSE精度

    目录 简要介绍代码运行结果 简要介绍 SIFT xff0c 即尺度不变特征变换 xff08 Scale invariant feature transform xff0c SIFT xff09 xff0c 是用于图像处理领域的一种描述 这种
  • (Python)使用Gdal进行批量的影像RPC正射校正

    使用Python 43 Gdal进行批量的影像RPC正射校正 文章目录 使用Python 43 Gdal进行批量的影像RPC正射校正摘要方法实验数据 实现代码介绍完整代码 实验结果代码运行结果正射校正结果性能 摘要 遥感影像经常会遇到大批量