当前位置:   article > 正文

利用python批量掩膜提取遥感图像_批量按掩膜提取

批量按掩膜提取

(1) 前言

遥感影像的提取和分析在地理信息系统、环境监测、农业、城市规划等领域具有重要的应用价值。按掩膜提取遥感影像是一种常用的方法,它可以通过定义掩膜来选择感兴趣的区域,并排除其他干扰因素。

按掩膜提取遥感影像的方法可以分为两个主要步骤:掩膜定义和影像提取。
掩膜定义
是指根据研究目的和需求,确定感兴趣的区域,并将其转化为掩膜图层。常用的掩膜定义方法包括手动绘制、阈值分割、形态学操作等。

影像提取
是指根据掩膜图层,将感兴趣的区域从原始遥感影像中提取出来。常用的影像提取方法包括像元级提取、基于对象的提取等。(本文主要方向)

  • 研究区概况:福建省厦门市
  • Landsat4 TM 影像,7波段共7景影像
  • Python版本:2.7.0
  • 文末附arcmap官方批量迭代器处理掩膜文件的代码,不建议使用(容易报错)
    在这里插入图片描述
  • 将批量掩膜结果导入arcgis
    在这里插入图片描述

(2) python代码实现

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
"""
@author: LIFEI
@time: 2023/8/22 13:28 
@file: print_file.py
@project: main.py
@describe: CWNU
"""

import os
import arcpy
from arcpy import env
from arcpy.sa import *

# 创建批量掩膜提取遥感影像的类
class RSshapemask:
    # 构造函数
    def __init__(self,major_path,workplace,mask_path,outputpath):
        # 存放待掩膜影像的文件夹路径
        self.majorpath = major_path
        # arcpy的工作空间,代码并不会在此路径中生成数据
        self.workplace = workplace
        # 存放掩膜数据的文件夹路径,记住arcgis创建掩膜数据之后需要对其进行定义投影
        self.mask_path = mask_path
        # 掩膜之后的文件输出路径
        self.outputpath = outputpath

    # 批量读取文件的路径并存储于列表中的子函数
    def readimgpath(self):
        # 创建空列表
        img_path_base = []
        # os库中listdir作用于访问指定文件夹中的文件,注意是所有文件
        for filename in os.listdir(self.majorpath):
            # 字符串拼接文件夹和文件名
            img_path = self.majorpath + '/' + filename
            # 将拼接的字符串传入列表
            img_path_base.append(img_path)
            # 由于汉字编码的问题,输出采用英文打印
            print('The remote sensing image being read is:',img_path)
        print("全部读取完成!")
        return img_path_base # 返回列表

    # 批量掩膜提取输出的子函数
    def masekhandle(self,img_base):
        # 当前掩膜的工作空间,最好是独立于数据文件的其他路径
        env.workspace = self.workplace
        for i in range(0, len(img_base)):
            comFilePath = img_base[i]
            # 字符串拼接输出文件夹和文件名,必须含有后缀
            outFilePathName = self.outputpath + str(i + 1) + ".tif"
            # ExtractByMsak_sa函数专门用于掩膜提取的工具
            outExtractByMask = arcpy.gp.ExtractByMask_sa(comFilePath, self.mask_path, outFilePathName)
            # 目的防止出错
            env.overwriteOutput = True
            # 打印
            print("The remote sensing image being output for mask extraction is:",outFilePathName)
        print("掩膜提取完成!")

# 主函数
if __name__ == '__main__':
    # 构造函数参数设置,注意路径中为'/',直接复制粘贴的路径为'\'
    # 1、手动将'\'改为'/'; 2、在路径前面加上r防止路径转义 ;
    project = RSshapemask('D:/data/img',
                          "D:/data/result",
                          "D:/data/shp/shp.shp",
                          "D:/data/result/landsat4_TM")
    img_path_base = project.readimgpath() # 将第一个子函数返回列表赋值给img_path_base
    project.masekhandle(img_path_base) # 传入第二个子函数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

(3) 运行结果

亲测有效,花费时间大约20秒
在这里插入图片描述
掩膜结果输出展示:
在这里插入图片描述

(4)arcmap官方批量迭代器处理掩膜文件的代码

在这里插入图片描述
提示:谨慎运行,大概率会报错

# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# mask.py
# Created on: 2023-08-21 14:54:08.00000
#   (generated by ArcGIS/ModelBuilder)
# Description: 
# ---------------------------------------------------------------------------

# Import arcpy module
import arcpy
# Load required toolboxes
arcpy.ImportToolbox("模型函数")
# Local variables:
img = "D:\\data\\img"
L5119043_04320100524_B10_TIF = "D:\\data\\img\\L5119043_04320100524_B10.TIF"
shp_shp = "D:\\data\\shp\\shp.shp"
v_name_ = "D:\\data\\result\\%name%"
名称 = "L5119043_04320100524_B10"
# Process: 迭代栅格数据
arcpy.IterateRasters_mb(img, "", "", "NOT_RECURSIVE")
# Process: 按掩膜提取
arcpy.gp.ExtractByMask_sa(L5119043_04320100524_B10_TIF, shp_shp, v_name_)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

(4) 掩膜原理:

按掩膜提取遥感影像的原理是基于像元级别的图像处理。掩膜定义过程中,根据研究目的和需求,将感兴趣的区域转化为二值掩膜图层。在影像提取过程中,将掩膜图层与原始遥感影像进行像元级别的运算,提取出感兴趣的区域。这种方法可以排除其他干扰因素,提高遥感影像的准确性和可靠性。

(5) 掩膜作用:

按掩膜提取遥感影像的作用主要体现在以下几个方面:

区域选择:可以根据研究目的和需求,选择感兴趣的区域进行分析和研究。
干扰排除:可以排除其他干扰因素,提高遥感影像的准确性和可靠性。
数据提取:可以从大量的遥感影像数据中提取出感兴趣的区域,减少数据处理的复杂性和计算量。
最新技术:
随着遥感技术的不断发展,按掩膜提取遥感影像的方法也在不断更新和改进。最新的技术包括:

  • 深度学习方法:
    利用深度学习算法,可以自动学习和提取遥感影像中的特征,提高影像提取的准确性和效率。

  • 多源数据融合:
    将多源遥感数据进行融合,可以提供更全面和准确的遥感影像提取结果。
    高分辨率影像处理:针对高分辨率遥感影像,开发了一系列针对性的处理方法,提高影像提取的精度和细节表达能力。

  • 掩膜偏差求解:
    在按掩膜提取遥感影像的过程中,可能会出现掩膜偏差的情况。掩膜偏差是指由于掩膜定义不准确或影像提取算法的局限性,导致提取结果与实际情况存在差异。

为了解决掩膜偏差问题,可以采用以下方法:

  • 优化掩膜定义:
    通过改进掩膜定义方法,减少掩膜偏差的发生。
  • 算法改进:
    进影像提取算法,提高提取结果的准确性和可靠性。
  • 数据验证:
    通过野外调查和实地验证,对提取结果进行验证和修正。

(6)结论:

按掩膜提取遥感影像是一种常用的方法,它可以通过定义掩膜来选择感兴趣的区域,并排除其他干扰因素。随着遥感技术的不断发展,最新的技术如深度学习方法和多源数据融合等,为按掩膜提取遥感影像提供了更高的准确性和效率。然而,掩膜偏差仍然是一个需要解决的问题,需要通过优化掩膜定义、算法改进和数据验证等方法来减少偏差的发生。未来,随着技术的进一步发展,按掩膜提取遥感影像的方法将会更加精确和可靠。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/81096
推荐阅读
相关标签
  

闽ICP备14008679号