IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> (Python)使用Gdal进行批量的影像RPC正射校正 -> 正文阅读

[网络协议](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上,校正一张在数秒到十几秒不等,考虑到易用性,性能的要求可以略微宽容;在主机或者性能本上应该具有更好的性能表现。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:59:31  更:2021-11-09 20:02:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/1 21:09:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码