详解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中实现的RC4算法
Feb 14 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python删除文本中行数标签的方法
May 31 Python
Python中反射和描述器总结
Sep 23 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
django 捕获异常和日志系统过程详解
Jul 18 Python
python自动下载图片的方法示例
Mar 25 Python
python右对齐的实例方法
Jul 05 Python
python如何进行基准测试
Apr 26 Python
详解Python生成器和基于生成器的协程
Jun 03 Python
openstack中的rpc远程调用的方法
Jul 09 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 fsockopen写的HTTP下载的类
2007/02/22 PHP
PHP生成网页快照 不用COM不用扩展.
2010/02/11 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
开发 Internet Explorer 右键功能表(ContextMenu)
2013/07/03 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
jQuery中extend()和fn.extend()方法详解
2015/06/03 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
利用ECharts.js画K线图的方法示例
2018/01/10 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python实现图像几何变换
2015/07/06 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
如何理解python面向对象编程
2020/06/01 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
Python实现一个简单的递归下降分析器
2020/08/01 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
酒店中秋节活动方案
2014/01/31 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
通信工程求职信
2014/07/16 职场文书