详解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函数返回多个值的示例方法
Dec 04 Python
Python中super()函数简介及用法分享
Jul 11 Python
好的Python培训机构应该具备哪些条件
May 23 Python
基于Python实现用户管理系统
Feb 26 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
Mar 23 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
在Python中表示一个对象的方法
Jun 25 Python
python基于Selenium的web自动化框架
Jul 14 Python
python定位xpath 节点位置的方法
Aug 27 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
python实现批处理文件
Jul 28 Python
DRF框架API版本管理实现方法解析
Aug 21 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
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
23个Javascript弹出窗口特效整理
2011/02/25 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
jQuery+jsp实现省市县三级联动效果(附源码)
2015/12/03 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
python实现从web抓取文档的方法
2014/09/26 Python
Python解析nginx日志文件
2015/05/11 Python
Python中常见的异常总结
2018/02/20 Python
通过Python实现一个简单的html页面
2020/05/16 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
说出数据连接池的工作机制是什么?
2013/04/19 面试题
华为的Java面试题
2014/03/07 面试题
中学生操行评语
2014/04/24 职场文书
工作求职信
2014/07/04 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
详解Redis复制原理
2021/06/04 Redis