python 遥感影像分块

在深度学习或其他一些应用中,往往需要对较大的遥感影像进行分块输出,并且保留原始的地理信息,以备后续使用。

本篇文章的目的即对遥感影像进行分块输出,按照网格顺序进行重新命名,其中边缘部分可能存在不足裁剪大小的情况,通过向前填补方式进行填充,故分块结果可能导致边缘部分存在一定重复率。

具体代码如下:

#!usr/bin/env python
# -*- coding: utf-8 -*-
"""
date:2022/9/2
author:甲戌_Tr
email: liu_xxxi@163.com
"""import sys,os
from osgeo import gdal
import numpy as np
from pathlib import Path as Pathclass TifCrop:def __init__(self,infile,crop_size,save_path,repete_rate=0):'''遥感影像分块函数:param infile: 输入tif文件:param crop_size: 分块大小,单值或元祖,int型。eg:200表示以 200*200个像元大小的方形进行分块,(100,200)表示以 100*200个像元大小的矩形进行分块:param repete_size:重复率, float, 其中值的范围为[0,1)之间, 默认值为0'''self.infile = infileself.crop_size = crop_sizeself.save_path = save_pathself.repete_rate = repete_rate# crop_size 参数判断if not isinstance(crop_size, int):if not isinstance(crop_size, tuple):raise Exception('crop_size 输入参数错误')else:if not (isinstance(crop_size[0], int) and isinstance(crop_size[1], int)):raise Exception('crop_size 输入参数错误')# repete_rate 参数判断if repete_rate >= 1 or repete_rate < 0:raise Exception('repete_rate 输出参数错误')def crop_tif(self):if isinstance(self.crop_size,tuple):crop_size_r = self.crop_size[0]crop_size_c = self.crop_size[1]else:crop_size_r = self.crop_sizecrop_size_c = self.crop_sizerepete_size_r = int(crop_size_r * (1 - self.repete_rate))repete_size_c = int(crop_size_c * (1 - self.repete_rate))ds = gdal.Open(self.infile)data = ds.ReadAsArray()geotrans = ds.GetGeoTransform()self.projection = ds.GetProjection()# 将单波段影像添加一个维度if len(data.shape) == 2:data = np.array([data])channel, rows, cols = data.shape# 向上取整col_num = int(np.ceil(cols / repete_size_c))row_num = int(np.ceil(rows / repete_size_r))# 循环读取# 边缘部分按照向前扩充原则进行提取# 当重复率较高或分块尺寸较小时,遇到边缘部分可能存在分割相同的情况,故用以下参数进行判断避免该情况发生start_point = (-1,-1)for i in range(col_num):for j in range(row_num):row_s = repete_size_r * jrow_e = repete_size_r * j + crop_size_r# 是否超出边界判断if row_e > rows:row_s = rows - crop_size_rrow_e = rowscol_s = repete_size_c * icol_e = repete_size_c * i + crop_size_c# 是否超出边界判断if col_e > cols:col_s = cols - crop_size_ccol_e = colsdata_crop = data[:,row_s:row_e,col_s:col_e]# 判断输出内容是否与之前存在重复情况,非完全重叠部分再进行分块输出if (row_s,col_s) != start_point:start_point = (row_s,col_s)# 地理信息存放new_geotrans = (geotrans[0] + geotrans[1] * col_s, geotrans[1], geotrans[2], geotrans[3] + geotrans[5] * row_s,geotrans[4],geotrans[5])# 输出文件名称out_file = self.save_path + os.sep + Path(self.infile).stem + '_' + str(j) + '_' + str(i) + Path(self.infile).suffixself.tif_write(data_crop,new_geotrans,out_file)def tif_write(self,data,trans,ofile):'''tif写入:param data: 分块后数组:param trans: 更新后的geotransform,包括六参数:param ofile: 输出全路径:return: None'''# 数据类型获取if 'int8' in data.dtype.name:datatype = gdal.GDT_Byteelif 'int16' in data.dtype.name:datatype = gdal.GDT_UInt16else:datatype = gdal.GDT_Float32# 输出tif文件按照单波段或多波段划分bands,height,width = data.shape# 创建文件driver = gdal.GetDriverByName("GTiff")dataset = driver.Create(ofile, int(width), int(height), int(bands), datatype)if (dataset != None):dataset.SetGeoTransform(trans)  # 写入仿射变换参数dataset.SetProjection(self.projection)  # 写入投影for i in range(bands):dataset.GetRasterBand(i + 1).WriteArray(data[i])del datasetif __name__ == '__main__':file = r'F:\input.tif'cropsize = 300savepath = r'F:\outpath'TifCrop(file,cropsize,savepath).crop_tif()

欢迎指正~

python——遥感影像分块相关推荐

  1. python遥感影像分类代码_python,sklearn,svm,遥感数据分类,代码实例

    python,sklearn,svm,遥感数据分类,代码实例,数据,函数,精度,遥感,路径 python,sklearn,svm,遥感数据分类,代码实例 易采站长站,站长之家为您整理了python,s ...

  2. python遥感影像分类代码_Python 实现遥感影像波段组合的示例代码

    最近要做个遥感相关的小系统,需要波段组合功能,网上找了可以使用ArcGIS安装时自带的arcpy包,但是Python3.7不能使用现有ArcGIS10.2版本,也不想再装其他版本,所以只能自己想了个办 ...

  3. Python遥感影像SAR分割裁剪多张小影像

    利用python,把SAR遥感影像裁剪分割多张小影像,tif分割png格式,分割后没有定位信息. import numpy as np from osgeo import gdal from osge ...

  4. python遥感影像分类代码_【博客翻译】使用 Python Tensorflow 实现简单的神经网络卫星遥感影像分类...

    Landsat 5 多光谱数据分类指导手册原作者:Pratyush Tripathy 翻译:荆雪涵 姐妹篇雪涵:[博客翻译]CNN 与中分辨率遥感影像分类​zhuanlan.zhihu.com 深度学 ...

  5. python遥感影像地物分类_基于TensorFlow的遥感影像地物识别方法研究

    文章编号: 1674-098X(2018)04(b)-0053-02 ①作者简介: 任芳语 ( 1996, 12- ) , 女, 汉族, 黑龙江讷河人, 本科在读, 研究方向:地理信息科学与遥感图像处 ...

  6. python遥感影像地物分类_基于轻量化语义分割网络的遥感图像地物分类方法与流程...

    本发明属于图像处理 技术领域: ,特别涉及一种地物分类方法,可用于土地利用分析.环境保护以及城市规划. 背景技术: :遥感图像地物分类,旨在取代繁琐的人工作业,利用地物分类方法,得到输入遥感图像的地物 ...

  7. python怎样画立体图形-用python来画出高光谱遥感影像的3D立体图

    这几天需要画出高光谱遥感影像,踩了不少坑,资料真的少得可怜.虽然没有完全搞懂,总归是尝试着画出来了.所以在这里把我遇到的问题罗列一下,仅供参考,如有不足,欢迎大家指正补充. 1.先来贴出我当时看到的第 ...

  8. 利用ArcGIS Python批量拼接裁剪遥感影像(arcpy batch processing)

    本篇文章将说明如何利用ArcGIS 10.1自带的Python IDLE进行遥感影像的批量拼接与裁剪. 1.运行环境:ArcGIS10.1 (安装传送门).Python IDLE 2.数据来源:地理空 ...

  9. python 读取geotiff_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...

    (1)利用python GDAL库读写geotiff格式的遥感影像方法,具有很好的参考价值,不错! from osgeo import gdal import numpy as np def read ...

  10. python repair修复功能_详解Python修复遥感影像条带的两种方式

    GDAL修复Landsat ETM+影像条带 Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带.如下图所示, 影像中均匀的布满条带. 使用GDAL修复影像条带的代码如 ...

最新文章

  1. 【牛腩新闻发布系统】系统发布06
  2. c 调用java包_C#调用java代码(IKVMC)
  3. Zookeeper知识点详解
  4. 【结论题(QAQ)】SSL新年欢乐赛暨BPM退役赛 A 送分题(luogu U102372)
  5. JSP基础--动作标签
  6. BZOJ 2124 等差子序列 线段树维护哈希
  7. 用Netty撸一个心跳机制和断线重连!
  8. hbuilderx内置服务器启动失败_Nginx服务器简介与配置
  9. Codeforces Gym 100203G G - Good elements 暴力
  10. 心海软件学生测试系统,心海软件
  11. 微信服务号开发整体流程
  12. 关于神舟笔记本电脑结束睡眠后耳机没声音的解决方法
  13. php mysql 表情录入_php + mysql 存入表情 【如何转义emoji表情,让它可以存入utf8的数据库】...
  14. 记录一下解决win10无法分屏问题
  15. 怎么调试S12X微控制器的XGATE上的软件
  16. Proteus 中 Virtual Terminal无法自动弹出窗口的问题的解决
  17. 微信小程序--小程序及微信生态圈
  18. python中怎么赋值一个数为负无穷_python里面正无穷和负无穷问题?
  19. 政考网:一年最多可以参加几次公务员考试?
  20. pandas中访问使用多个索引的Series

热门文章

  1. 计算机考研需要过英语六级吗,研究生毕业要过英语六级吗 研究生毕业对英语六级有要求吗...
  2. drm android 工作原理,[原创]某DRM解密流程简单分析
  3. 浏览器渲染流水线解析与网页动画性能优化
  4. study-eighth-fun-1
  5. STM32之DS1682
  6. px4初探-qgroundcontrol安装
  7. R语言中dim函数_R语言入门:函数介绍(3)—— %gt;%
  8. 判断两条直线的位置关系
  9. 计算机提示无法找到启动盘,怎么解决进入系统启动项窗口找不到U盘启动项-电脑自学网...
  10. 【股票】融资融券基本概念