详解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判断IP地址合法性的方法实例
Mar 13 Python
python插入排序算法实例分析
Jul 03 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
Flask配置Cors跨域的实现
Jul 12 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
Python3 文章标题关键字提取的例子
Aug 26 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
python实现梯度下降算法的实例详解
Aug 17 Python
利用Python实时获取steam特惠游戏数据
Jun 25 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 类型转换函数intval
2009/06/20 PHP
Php图像处理类代码分享
2012/01/19 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
PHP入门教程之上传文件实例详解
2016/09/11 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
angularjs实现柱状图动态加载的示例
2017/12/11 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
Python3搜索及替换文件中文本的方法
2015/05/22 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
python numpy库np.percentile用法说明
2020/06/08 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
Linux的文件类型
2012/03/07 面试题
大学生党性分析材料
2014/12/19 职场文书
公司给客户的感谢信
2015/01/23 职场文书
医德医风个人总结
2015/02/28 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis