详解Python修复遥感影像条带的两种方式


Posted in Python onFebruary 23, 2020

GDAL修复Landsat ETM+影像条带

Landsat7 ETM+卫星影像由于卫星传感器故障,导致此后获取的影像出现了条带。如下图所示, 影像中均匀的布满条带。

详解Python修复遥感影像条带的两种方式

使用GDAL修复影像条带的代码如下:

def gdal_repair(tif_name, out_name, bands):
  """
    tif_name(string): 源影像名
    out_name(string): 输出影像名
    bands(integer): 影像波段数
  """
  # 打开影像文件
  tif = gdal.Open(tif_name)
  
  # 根据文件类型获取对应的驱动程序
  driver = gdal.GetDriverByName('GTiff')
  
  # 根据指定文件的驱动程序,使用现有数据集创建新的可写数据集
  # 所有支持创建新文件的驱动程序都支持该`CreateCopy()`方法,   # 但仅`Create()`部分支持该方法
  # CreateCopy的第一个参数为目标文件名,第二个参数为源数据集
  # 第三个参数的值是`0`或`1`,值是`0`。即使无法将原始数据准确地转换为目标数据,程序仍将执行
  new_img = driver.CreateCopy(out_name, tif, 0)
 
  for i in tqdm(range(1, bands)):
    # 分别对每个波段处理
    band = new_img.GetRasterBand(i)
    
    # 使用FillNodata对条带部分进行插值
    gdal.FillNodata(targetBand = band, maskBand = band, maxSearchDist = 15, smoothingIterations=0)
    
    # 将修复好的波段写入新数据集中
    new_img.GetRasterBand(i).WriteArray(band.ReadAsArray())

修复之后的效果图如下所示:

详解Python修复遥感影像条带的两种方式

Opencv修复Landsat ETM+影像条带

使用opencv修复影像的代码如下:

def cv2_repair(tif_name):
  # 读取tif影像
  tif_data = gdal_array.LoadFile(tif_name).astype('float32')

  # 获取掩膜
  mask = tif_data.sum(axis=0)
  mask = (mask == 0).astype(np.uint8)
  
  bands = tif_data.shape[0]

  res = []
  for i in tqdm(range(bands)):
    # cv.Inpaint(src, inpaintMask, dst, inpaintRadius, flags)
    # src:源图像,可以是8位、16位无符号整型和32位浮点型1通道或者8位无符号3通道
    # inpaintMask:掩膜,8位无符号整型
    # dst:和源图像具有一样大小的输出
    # inpaintRadius:算法考虑的每个已修复点的圆形邻域的半径     # flags:修复算法类型,可选cv2.INPAINT_NS和cv2.INPAINT_TELEA
    
    repaired = cv2.inpaint(tif_data[i], mask, 3, flags=cv2.INPAINT_TELEA)
    res.append(repaired)

  return np.array(res)

修复之后的结果图:

详解Python修复遥感影像条带的两种方式

使用opencv修复影像,速度要比Gdal慢许多,但修复质量更好。

Reference

https://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_reconstruction_Inpainting_Interpolation.php

https://gis.stackexchange.com/questions/151020/how-to-use-gdal-fillnodata-in-python

到此这篇关于详解Python修复遥感影像条带的两种方式的文章就介绍到这了,更多相关Python修复遥感影像条带内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Python的词法分析与语法分析
May 18 Python
python 调用win32pai 操作cmd的方法
May 28 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
Python Numpy 数组的初始化和基本操作
Mar 13 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
Python中捕获键盘的方式详解
Mar 28 Python
pytorch dataloader 取batch_size时候出现bug的解决方式
Feb 20 Python
Python批量将图片灰度化的实现代码
Apr 11 Python
python读写数据读写csv文件(pandas用法)
Dec 14 Python
用Python实现Newton插值法
Apr 17 Python
pytorch 实现变分自动编码器的操作
May 24 Python
python2 对excel表格操作完整示例
Feb 23 #Python
深入浅析python变量加逗号,的含义
Feb 22 #Python
详解django中Template语言
Feb 22 #Python
Python使用configparser库读取配置文件
Feb 22 #Python
Pytest参数化parametrize使用代码实例
Feb 22 #Python
Pytest mark使用实例及原理解析
Feb 22 #Python
python如何通过闭包实现计算器的功能
Feb 22 #Python
You might like
实现树状结构的两种方法
2006/10/09 PHP
php 在线打包_支持子目录
2008/06/28 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
将string解析为json的几种方式小结
2010/11/11 Javascript
jQuery技巧总结
2011/01/01 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
javascript限制文本框输入值类型的方法
2015/05/07 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
Vue.js中关于侦听器(watch)的高级用法示例
2018/05/02 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
彻底解决Python包下载慢问题
2020/11/15 Python
Python脚本调试工具安装过程
2021/01/11 Python
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
翻译专业应届生求职信
2013/11/23 职场文书
怎样写演讲稿
2014/01/04 职场文书
学生周末长期请假条
2014/02/15 职场文书
学校感恩节活动策划方案
2014/10/06 职场文书
销售员岗位职责
2015/02/10 职场文书
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python