【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)

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

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

        Python的GDAL库作为栅格数据的处理转换库,其支持几百种栅格数据格式,如常见的TIFF、ENVI、HFA、HDF4等。因为遥感影像大部分都是栅格数据,所以GDAL库非常适合处理遥感影像、如光谱指数计算、波段合成、批量下载、栅格转面等。

        本次介绍如何通过遥感影像的仿射地理变换参数将像素坐标转为地理/投影坐标,在ENVI或者ArcGIS中都是自动转换,所以你在点击影像的某一像元时,它就会显示对应的地理/投影坐标。但如果你想用Python去实现,就需要使用影像的放射地理参数。

一、获取仿射地理变换参数

        之前发布【Python&RS】GDAL计算遥感影像光谱指数(如NDVI、NDWI、EVI等)时就已经用过这部分代码,没啥好说的,就是获取影像的基本参数。代码中除了仿射地理变换参数其他没啥用,但我习惯全部输出。

def Get_data(filepath):
    """
    :param filepath: 输入影像的路径
    :return: 返回仿射地理变换参数
    """
    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))
    return ds_geo
    # data = ds.ReadAsArray(0, 0, ds_width, ds_height)  # 以数组的形式读取整个数据集
【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)

二、像素坐标转地理/投影坐标

        这里先介绍一下仿射地理变换参数(3497294, 0.1, 0.0, 3438148, 0.0, -0.1),这样大家可以更直观的明白代码的意思。

        0:图像左上角的X坐标
        1:图像东西方向分辨率
        2:旋转角度,如果图像北方朝上,该值为0
        3:图像左上角的Y坐标
        4:旋转角度,如果图像北方朝上,该值为0
        5:图像南北方向分辨率

def Pixel_Coordinate(x, y, ds_geo):
    """
    :param x: 输入x像素坐标
    :param y: 输入y像素坐标
    :param ds_geo: 输入仿射地理变换参数
    :return: 返回x,y的地理/投影坐标
    """
    x_geo = ds_geo[0]+ds_geo[1]*x + y*ds_geo[2]
    y_geo = ds_geo[3]+ds_geo[4]*x + y*ds_geo[5]
    print(x_geo, y_geo)
    return x_geo, y_geo
【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)

        从代码中我们可以看到使用仿射地理变换参数将像素坐标转成地理坐标时,就是将左上角的x,y值加上x,y的像素坐标乘以分辨率(即实际距离),然后再加上偏转就行了。这和我之前写的通过图片中心点地理坐标推算整张图片所有像素点地理坐标的原理是一样的,只不过这里的仿射地理变换参数是影像自带的,而之前写的【Python&GIS】根据像素坐标计算图片某点的地理/投影坐标中的偏转角度是自己算出来的。

三、地理/投影坐标转像素坐标

def Coordinate_Pixel(x_geo, y_geo, ds_geo):
    """
    :param x_geo: 输入x地理坐标
    :param y_geo: 输入y地理坐标
    :param ds_geo: 输入仿射地理变换参数
    :return: 返回x,y像素坐标
    """
    y = ((y_geo - ds_geo[3] - ds_geo[4] / ds_geo[1] * x_geo + ds_geo[4] / ds_geo[1] * ds_geo[
        0]) / (ds_geo[5] - ds_geo[4] / ds_geo[1] * ds_geo[2]))
    x = ((x_geo - ds_geo[0] - y * ds_geo[2]) / ds_geo[1])
    return int(x), int(y)
【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)

 

 本文章主要是分享个人在学习Python过程中写过的一些代码。有些部分借鉴了前人以及官网的教程,如有侵权请联系作者删除,大家有问题可以随时留言交流,博主会及时回复。文章来源地址https://www.toymoban.com/news/detail-474633.html

到了这里,关于【Python&RS】遥感影像的像素坐标转地理坐标(仿射变换)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • python:使用Scikit-image对遥感影像进行傅里叶变换特征提取(fourier)

    作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行傅里叶变换特征提取(fourier),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 傅里叶变换特征提取是一种数学工具,用于将图像中的细节、纹理和边缘信息以不同频率的方式呈

    2024年02月07日
    浏览(50)
  • C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组

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

    2024年02月19日
    浏览(39)
  • ENVI为遥感影像设置空间坐标系的方法

      本文介绍基于 ENVI 软件,对 不含有任何地理参考信息 的栅格遥感影像添加 地理坐标系 或 投影坐标系 等 地理参考信息 的方法。   我们先来看一下本文需要实现的需求。现有以下两景遥感影像,其位于不同的空间位置;但由于二者均不含任何地理参考信息,导致其在

    2024年03月13日
    浏览(43)
  • opencv-python使用鼠标点击图片显示该点坐标和像素值&&IPM逆透视变换车道线&&二值化处理

    实现获取像素点的功能主要基于OpenCV的内置函数cv2.setMouseCallback(),即鼠标事件回调 setMouseCallback(winname, onMouse,userdata=0) winname: 接收鼠标事件的窗口名称 onMouse: 处理鼠标事件的回调函数指针 userdata: 传给回调函数的用户数据  代码实现:鼠标点击图片时,读取当前鼠标对应位置

    2024年02月12日
    浏览(54)
  • 【Python图像处理篇】opencv中的仿射变换和透视变换

    仿射变换可以将矩形图片映射为平行四边形, 透视变换可以将矩形图片映射为任意四边形。 opencv提供了两个变换函数,cv2.warpAffine和cv2.warpPerspective, 使用这两个函数可以实现所有类型的变换。 cv2.warpAffine 接收的参数2x3的变换矩阵; 而 cv2.warpPerspective 接收的3x3的变换矩阵。

    2024年01月24日
    浏览(67)
  • OpenCV(图像处理)-基于Python-图像的基本变换-平移-翻转-仿射变换-透视变换

    为了方便开发人员的操作,OpenCV还提供了一些图像变换的API,本篇文章讲简单介绍各种API的使用,并附上一些样例。 图像缩放函数,用于把图像按指定的尺寸放大或缩小。 dst = cv2.resize(src, dsize, fx, fy, interpolation) dst = 生成的目的图像 src:需要变换的原图像 disize:(x, y)需要

    2024年02月08日
    浏览(68)
  • 基于python与GDAL获取遥感影像

    最近做项目,发现网上关于利用python与GDAL读取遥感影像数据的资料比较少。因此整理了一些,以方便自己学习。      1.首先确认自己电脑上安装好python版的GDAL库。这个会以后有时间慢慢整理。       2. 导入gdal库          from osgeo import gdal       3. 注册GDAL库   

    2023年04月25日
    浏览(51)
  • Python批量填补遥感影像的无效值NoData

      本文介绍基于 Python 中 ArcPy 模块,对大量栅格遥感影像文件 批量 进行 无效值 ( NoData 值)填充的方法。   在处理栅格图像文件时,我们经常会遇到图像中存在有无效值(即 NoData 值)的情况。如下图所示,这里有一个 矢量面要素图层 和该矢量图层范围对应的一景 栅

    2024年02月07日
    浏览(46)
  • Python实现snap:对齐多张遥感影像的空间范围

      本文介绍基于 Python 中 ArcPy 模块,实现基于 栅格图像 批量裁剪 栅格图像 ,同时 对齐 各个栅格图像的 空间范围 , 统一 其各自 行数 与 列数 的方法。   首先明确一下我们的需求。现有某一地区的多张栅格遥感影像,其虽然都大致对应着同样的地物范围,但不同栅格

    2024年03月09日
    浏览(57)
  • Python ArcPy批量计算多时相遥感影像的各项元平均值

      本文介绍基于 Python 中 ArcPy 模块,对大量 长时间序列 栅格遥感影像文件的 每一个像元 进行 多时序平均值 的求取。   在遥感应用中,我们经常需要对 某一景 遥感影像中的 全部像元的像素值 进行平均值求取——这一操作很好实现,基于 ArcMap 软件或者简单的 Python 代

    2023年04月18日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包