详解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使用mailbox打印电子邮件的方法
Apr 30 Python
在Python的Django框架的视图中使用Session的方法
Jul 23 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
python numpy元素的区间查找方法
Nov 14 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
使用Fabric自动化部署Django项目的实现
Sep 27 Python
python实现局域网内实时通信代码
Dec 22 Python
使用pytorch和torchtext进行文本分类的实例
Jan 08 Python
tensorflow求导和梯度计算实例
Jan 23 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
python里反向传播算法详解
Nov 22 Python
python 镜像环境搭建总结
Sep 23 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开发中四种查询返回结果分析
2011/01/02 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
php日期操作技巧小结
2016/06/25 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
利用JS延迟加载百度分享代码,提高网页速度
2013/07/01 Javascript
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
babel之配置文件.babelrc入门详解
2018/02/22 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
简单介绍Python中的RSS处理
2015/04/13 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
英文翻译的自我评价语句
2013/10/04 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
安全负责人任命书
2014/06/06 职场文书
师范生求职信
2014/06/14 职场文书
离婚协议书怎么写
2014/09/12 职场文书
教育合作协议范本
2014/10/17 职场文书
故意杀人案辩护词
2015/05/21 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python