详解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 相关文章推荐
python实现定时提取实时日志程序
Jun 22 Python
Django代码性能优化与Pycharm Profile使用详解
Aug 26 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
使用python批量化音乐文件格式转换的实例
Jan 09 Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 Python
python之pexpect实现自动交互的例子
Jul 25 Python
python3中rank函数的用法
Nov 27 Python
Pytorch之保存读取模型实例
Dec 30 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
python如何利用paramiko执行服务器命令
Nov 07 Python
python全栈开发语法总结
Nov 22 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
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
Vue头像处理方案小结
2018/07/26 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
Python中的生成器和yield详细介绍
2015/01/09 Python
Python脚本实现网卡流量监控
2015/02/14 Python
使用Python生成url短链接的方法
2015/05/04 Python
Python简明入门教程
2015/08/04 Python
Python实现读取txt文件并画三维图简单代码示例
2017/12/09 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
python在不同条件下的输入与输出
2020/02/13 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
产品生产计划书
2014/05/07 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
班级文化建设标语
2014/06/23 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
学习十八大的感悟
2015/08/11 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
MySQL日期时间函数知识汇总
2022/03/17 MySQL