【Python&RS】基于GDAL镶嵌拼接遥感影像

这篇具有很好参考价值的文章主要介绍了【Python&RS】基于GDAL镶嵌拼接遥感影像。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        没啥好说的,处理高分辨率影像时,数据高达几十G。用ENVI或者ArcGIS进行影像的拼接时,往往会出现未响应的情况。出现未响应的话,运气好等个一晚上可能会动一动,运气不好就等着强制关闭重做吧。

        所以搞了一个Python进行拼接操作的代码,虽然速度不算快,但至少不会未响应。同时如果对代码进行一些改进,还可以进行批量拼接的操作,百利而无一害。

一、导入GDAL库

from osgeo import gdal

二、查看影像信息

        为了凑字数的,可以查看影像的投影、宽度、高度、波段数等信息。不过需要注意的是在ENVI中没有投影坐标系,只有地理坐标系是做不了镶嵌拼接的。

        这个代码我还不太清楚能不能不要投影坐标系进行拼接,你们可以自己试试。但最好还是用包含投影坐标系的影像进行拼接。所以在拼接之前就可以用这段代码先看一看。

def Get_data(filepath):
    ds = gdal.Open(filepath)  # 打开数据集dataset
    ds_width = ds.RasterXSize  # 获取数据宽度
    ds_height = ds.RasterYSize  # 获取数据高度
    ds_bands = ds.RasterCount  # 获取波段数
    ds_geo = ds.GetGeoTransform()  # 获取仿射地理变换参数
    ds_prj = ds.GetProjection()  # 获取投影信息
    print("影像的宽度为:" + str(ds_width))
    print("影像的高度为:" + str(ds_height))
    print("仿射地理变换参数为:" + str(ds_geo))
    print("投影坐标系为:" + str(ds_prj))
    # data = ds.ReadAsArray(0, 0, ds_width, ds_height)  # 以数组的形式读取整个数据集

三、镶嵌模块

        这里用到了GDAL中的Warp函数,是不是有点熟悉。之前裁剪也是用的这个函数,不得不说这个函数是真的强大,之前有文章介绍了其中的函数,大家有兴趣可以去看下,同时给个赞吧!【Python&RS】GDAL批量裁剪遥感影像/栅格数据

        代码中的srcSRS,dstSRS分别是输入投影和输出投影,这里用一样的就行了。因为我们做的是镶嵌操作,肯定是不用动原始坐标系的。其他的参数都在代码中表明了,这里就不介绍了,如果大家有什么问题,可以留言交流。

def Mosaic_GDAL(path_image1, path_image2, path_out):
    """
    :param path_image1: 需要镶嵌的影像
    :param path_image2: 需要镶嵌的影像
    :param path_out: 镶嵌后输出的影像路径
    :return: None
    """
    image1 = gdal.Open(path_image1, gdal.GA_ReadOnly)  # 第一幅影像
    input_proj = image1.GetProjection()
    image2 = gdal.Open(path_image2, gdal.GA_ReadOnly)  # 第二幅影像
    options = gdal.WarpOptions(srcSRS=input_proj, dstSRS=input_proj, format='GTiff',
                               resampleAlg=gdal.GRA_NearestNeighbour,callback=Show_Progress)
    # 输入投影,输出投影,输出格式,重采样方法
    gdal.Warp(path_out, [image1, image2], options=options)
    # 输出路径,需要镶嵌的数据,参数配置
    ds = gdal.Open(path_out, gdal.GA_ReadOnly)
    ds.BuildOverviews(overviewlist=[2, 4, 8, 16])
    # 创建金字塔
    del image1, image2, ds

四、回调函数(没啥用) 

        上一篇博文已经介绍过了,就两点:1.水字数,2.记录进度。省的看着代码发呆。

def Show_Progress(percent, msg, tag):
    """
    :param percent: 进度,0~1
    :param msg:
    :param tag:
    :return:
    """
    if 25 <= percent*100 <= 26:
        print("进度:" + "%.2f" % (percent*100) + "%")
    if 50 <= percent*100 <= 51:
        print("进度:" + "%.2f" % (percent*100) + "%")
    if 75 <= percent*100 <= 76:
        print("进度:" + "%.2f" % (percent*100) + "%")

五、完整代码

# -*- coding: utf-8 -*-
"""
@Time : 2023/6/25 16:28
@Auth : RS迷途小书童
@File :Raster Data Mosaic.py
@IDE :PyCharm
@Purpose:遥感影像、栅格数据的镶嵌拼接(有明显拼接线)
"""
from osgeo import gdal


def Get_data(filepath):
    ds = gdal.Open(filepath)  # 打开数据集dataset
    ds_width = ds.RasterXSize  # 获取数据宽度
    ds_height = ds.RasterYSize  # 获取数据高度
    ds_bands = ds.RasterCount  # 获取波段数
    ds_geo = ds.GetGeoTransform()  # 获取仿射地理变换参数
    ds_prj = ds.GetProjection()  # 获取投影信息
    print("影像的宽度为:" + str(ds_width))
    print("影像的高度为:" + str(ds_height))
    print("仿射地理变换参数为:" + str(ds_geo))
    print("投影坐标系为:" + str(ds_prj))
    # data = ds.ReadAsArray(0, 0, ds_width, ds_height)  # 以数组的形式读取整个数据集


def Show_Progress(percent, msg, tag):
    """
    :param percent: 进度,0~1
    :param msg:
    :param tag:
    :return:
    """
    if 25 <= percent*100 <= 26:
        print("进度:" + "%.2f" % (percent*100) + "%")
    if 50 <= percent*100 <= 51:
        print("进度:" + "%.2f" % (percent*100) + "%")
    if 75 <= percent*100 <= 76:
        print("进度:" + "%.2f" % (percent*100) + "%")


def Mosaic_GDAL(path_image1, path_image2, path_out):
    """
    :param path_image1: 需要镶嵌的影像
    :param path_image2: 需要镶嵌的影像
    :param path_out: 镶嵌后输出的影像路径
    :return: None
    """
    image1 = gdal.Open(path_image1, gdal.GA_ReadOnly)  # 第一幅影像
    input_proj = image1.GetProjection()
    image2 = gdal.Open(path_image2, gdal.GA_ReadOnly)  # 第二幅影像
    options = gdal.WarpOptions(srcSRS=input_proj, dstSRS=input_proj, format='GTiff',
                               resampleAlg=gdal.GRA_NearestNeighbour, callback=Show_Progress)
    # 输入投影,输出投影,输出格式,重采样方法
    gdal.Warp(path_out, [image1, image2], options=options)
    # 输出路径,需要镶嵌的数据,参数配置
    ds = gdal.Open(path_out, gdal.GA_ReadOnly)
    ds.BuildOverviews(overviewlist=[2, 4, 8, 16])
    # 创建金字塔
    del image1, image2, ds


if __name__ == "__main__":
    path1 = "B:/proj_clip"
    path2 = "B:/2_proj_clip"
    path_output = "warp1.tif"
    print("开始拼接......")
    Mosaic_GDAL(path1, path2, path_output)
    print("拼接完成......")

        这里有一点需要注意的就是,用这个方法进行镶嵌拼接操作时,影像有一条明显的拼接线,不知道是不是我数据的问题。你们可以自己尝试一下。只要修改主函数中的路径即可。

           如果大家在学习Python或者RS时有什么问题,可以随时留言交流!如果大家对批量处理有兴趣同样可以留言给博主,博主会分享相关代码以供学习!文章来源地址https://www.toymoban.com/news/detail-786009.html

到了这里,关于【Python&RS】基于GDAL镶嵌拼接遥感影像的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组

      本文介绍基于 C++ 语言 GDAL 库, 批量读取 大量栅格遥感影像文件,并生成 各像元数值的时间序列 数组的方法。   首先,我们来明确一下本文所需实现的需求。现在有一个文件夹,其中包含了很多不同格式的文件,如下图所示。   其中,我们首先需要遍历这一文件

    2024年02月19日
    浏览(26)
  • ENVI实现基于像元方法的栅格图像镶嵌拼接(所有图像无需地理信息)

    本文介绍基于 ENVI 软件,利用“ Pixel Based Mosaicking ”工具实现栅格遥感影像 镶嵌拼接 的方法。 首先需要说明的是,本文需要镶嵌的遥感影像并不含地理参考信息,因此仅可以使用 ENVI 中的“ Pixel Based Mosaicking ”工具(该工具可以对 含有或不含有 地理参考信息的图像进行镶

    2024年02月04日
    浏览(39)
  • 通过Stable Diffusion生成虚假的遥感影像

    这两天玩了一下stable diffusion,是真的好玩! 然后我在想遥感有没有相关的生成模型,找了一下,还真找到了(https://github.com/xiaoyuan1996/Stable-Diffusion-for-Remote-Sensing-Image-Generation/tree/main)。 该模型的作者是空天院的 Zhiqiang yuan ,他提供了相关的训练代码、预测代码、已经训练好

    2024年01月24日
    浏览(230)
  • 基于Python3.7实现的双时相遥感影像变化检测(PaddlePaddle框架和AI Studio平台)

    目 录 第一章 绪论 1 1.1问题背景及意义 1 1.2国内外研究现状 1 1.3论文主要研究内容 2 1.4论文组织结构 3 第二章 相关技术 5 2.1遥感图像变化检测 5 2.2 孪生网络 7 2.3 残差网络 8 2.4 注意力机制 9 第三章 基于BIT的遥感影像变化检测 11 3.1 Transformer模型 11 3.2 BIT模型 12 3.3 AC-BIT模型 1

    2024年01月19日
    浏览(47)
  • 【Python】GDAL基本操作/遥感大图显示

    遥感图像往往尺寸较大,无法用默认的图像浏览器加载。 GDAL是空间数据处理的开源包,支持多种数据格式的读写。 遥感图像是一种带大地坐标的栅格数据,因此,可以借用GDAL对遥感图像进行读写,本文就来记录一些相关操作。 gdal可通过荧光动力学实验室(Laboratory for Fluor

    2024年02月02日
    浏览(28)
  • 【Python&RS】GDAL库Warp函数介绍

            GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。 Python的GDAL库作为栅格数据的处理转换库,其支持几百种栅格数据格式,如

    2024年02月03日
    浏览(31)
  • 基于PyTorch深度学习遥感影像地物分类与目标检测、分割及遥感影像问题深度学习优化

    我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时代已然来临。随着小

    2024年02月11日
    浏览(42)
  • Python遥感图像处理应用篇036:GDAL+Scikit-image计算遥感图像梯度直方图HOG

    方向梯度直方图HOG(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。Hog特征结合SVM分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功

    2024年02月11日
    浏览(33)
  • 基于R语言的raster包读取遥感影像

      本文介绍基于 R 语言中的 raster 包,读取 单张 或批量读取 多张 栅格图像,并对栅格图像数据加以 基本处理 的方法。   首先,我们需要配置好对应的 R 语言包;前面也提到,我们这里选择基于 raster 包来实现栅格图像数据的读取与处理工作。首先,如果有需要的话,

    2024年03月15日
    浏览(30)
  • C#处理医学影像(四):基于Stitcher算法拼接人体全景脊柱骨骼影像

    在拍摄脊柱或胸片时,经常会遇到因设备高度不够需要分段拍摄的情况, 对于影像科诊断查阅影像时希望将分段影像合并成一张影像,有助于更直观的观察病灶, 以下图为例的两个分段影像:       我们使用OpenCVSharp中的Stitcher类的Stitch方法,导入两张图像并拼接:  但结果

    2024年02月02日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包