(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) # 传入第二个子函数
(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_)
(4) 掩膜原理:
按掩膜提取遥感影像的原理是基于像元级别的图像处理。掩膜定义过程中,根据研究目的和需求,将感兴趣的区域转化为二值掩膜图层。在影像提取过程中,将掩膜图层与原始遥感影像进行像元级别的运算,提取出感兴趣的区域。这种方法可以排除其他干扰因素,提高遥感影像的准确性和可靠性。
(5) 掩膜作用:
按掩膜提取遥感影像的作用主要体现在以下几个方面:
区域选择:可以根据研究目的和需求,选择感兴趣的区域进行分析和研究。
干扰排除:可以排除其他干扰因素,提高遥感影像的准确性和可靠性。
数据提取:可以从大量的遥感影像数据中提取出感兴趣的区域,减少数据处理的复杂性和计算量。
最新技术:
随着遥感技术的不断发展,按掩膜提取遥感影像的方法也在不断更新和改进。最新的技术包括:
-
深度学习方法:
利用深度学习算法,可以自动学习和提取遥感影像中的特征,提高影像提取的准确性和效率。 -
多源数据融合:
将多源遥感数据进行融合,可以提供更全面和准确的遥感影像提取结果。
高分辨率影像处理:针对高分辨率遥感影像,开发了一系列针对性的处理方法,提高影像提取的精度和细节表达能力。 -
掩膜偏差求解:
在按掩膜提取遥感影像的过程中,可能会出现掩膜偏差的情况。掩膜偏差是指由于掩膜定义不准确或影像提取算法的局限性,导致提取结果与实际情况存在差异。
为了解决掩膜偏差问题,可以采用以下方法:
- 优化掩膜定义:
通过改进掩膜定义方法,减少掩膜偏差的发生。 - 算法改进:
进影像提取算法,提高提取结果的准确性和可靠性。 - 数据验证:
通过野外调查和实地验证,对提取结果进行验证和修正。
(6)结论:
按掩膜提取遥感影像是一种常用的方法,它可以通过定义掩膜来选择感兴趣的区域,并排除其他干扰因素。随着遥感技术的不断发展,最新的技术如深度学习方法和多源数据融合等,为按掩膜提取遥感影像提供了更高的准确性和效率。然而,掩膜偏差仍然是一个需要解决的问题,需要通过优化掩膜定义、算法改进和数据验证等方法来减少偏差的发生。未来,随着技术的进一步发展,按掩膜提取遥感影像的方法将会更加精确和可靠。