Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理

使用情况

运行环境:由于安装arcgis的时候自动配置的是python2.7,所以直接使用2.7运行环境,有些语法上和python3有些不一样。

使用情况:把镶嵌的数据放在A、B两个文件夹把,然后按照顺序对应进行镶嵌,即A中的第i个和B中的第i个进行镶嵌。

Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理_第1张图片

Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理_第2张图片

Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理_第3张图片

基本语法说明

语法:

语法说明:https://desktop.arcgis.com/zh-cn/arcmap/latest/tools/data-management-toolbox/mosaic.htm

这里采用镶嵌数据集工具

Mosaic(inputs, target, {mosaic_type}, {colormap}, {background_value}, {nodata_value}, {onebit_to_eightbit}, {mosaicking_tolerance}, {MatchingMethod})
参数 说明 数据类型

inputs

[input,...]

待合并的栅格数据集。

Mosaic Dataset ; Composite Layer ; Raster Dataset ; Raster Layer

target

待添加输入栅格的栅格。此栅格数据集必须已经存在。默认情况下,目标栅格被视为输入栅格数据集列表中的第一个栅格。使用创建栅格数据集工具可创建空栅格。

Raster Dataset

mosaic_type

(可选)

用于镶嵌重叠的方法。

  • FIRST —叠置区域的输出像元值为镶嵌到该位置的第一个栅格数据集中的值。
  • LAST —叠置区域的输出像元值为镶嵌到该位置的最后一个栅格数据集中的值。这是默认设置。
  • BLEND —叠置区域的输出像元值为叠置区域中各像元值的水平加权计算结果。
  • MEAN —重叠区域的输出像元值为叠置像元的平均值。
  • MINIMUM —重叠区域的输出像元值为叠置像元的最小值。
  • MAXIMUM —重叠区域的输出像元值为叠置像元的最大值。
  • SUM —重叠区域的输出像元值为叠置像元的总和。
String

colormap

(可选)

对输入栅格中应用于镶嵌输出的色彩映射表进行选择的方法。

  • FIRST —列表中第一个栅格数据集中的色彩映射表将应用于输出栅格镶嵌。这是默认设置。
  • LAST —列表中最后一个栅格数据集中的色彩映射表将应用于输出栅格镶嵌。
  • MATCH —镶嵌时会考虑所有色彩映射表。如果已经使用了所有可能的值(对于位深度),则会尝试与具有最接近的可用色彩的值进行匹配。
  • REJECT —仅对那些不包含关联色彩映射表的栅格数据集进行镶嵌。
String

background_value

(可选)

使用此选项移除在栅格数据周围创建的不需要的值。指定的值与栅格数据集中的其他有用数据不同。例如,栅格边界上为零的值不同于栅格数据集内的零值。

指定的像素值在输出栅格数据集中将被设置为 NoData。

对于基于文件的栅格和地理数据库栅格,要忽略背景值,必须将其设置为与 NoData 相同的值。企业级地理数据库栅格无需经过此额外步骤即可忽略背景值。

Double

nodata_value

(可选)

具有指定值的所有像素将在输出栅格数据集中被设置为 NoData。

Double

onebit_to_eightbit

(可选)

选择是否将输入 1 位栅格数据集转换为 8 位栅格数据集。使用这种转换方法时,输入栅格数据集中的值 1 将在输出栅格数据集中更改为 255。这在将 1 位栅格数据集导入地理数据库时十分有用。1 位栅格数据集存储在文件系统中时包含 8 位金字塔图层,但在地理数据库中,1 位栅格数据集只能包含 1 位金字塔图层,这使得显示画面看起来没有吸引力。通过在地理数据库中将数据转换为 8 位,可将金字塔图层构建为 8 位而非 1 位,从而在显示画面中生成适合的栅格数据集。

  • NONE —不执行任何转换。这是默认设置。
  • OneBitTo8Bit —将转换输入栅格。
Boolean

mosaicking_tolerance

(可选)

发生镶嵌时,目标及源像素并不总是准确地排成直线。当存在像素偏差时,需要决定是否执行重采样,或是否应当平移数据。镶嵌容差可控制是否对像素执行重采样,或者是否应当平移像素。

如果(传入的数据集与目标数据集之间的)像素偏差大于该容差,则执行重采样。如果(传入的数据集与目标数据集之间的)像素偏差小于该容差,则不执行重采样(而是执行平移)。

容差的单位为像素,有效值范围为 0 到 0.5。容差为 0.5 会保证发生平移。存在像素偏差时,容差为零会保证执行重采样。

例如,源像素和目标像素的偏差值为 0.25。如果将镶嵌容差设置为 0.2,由于像素偏差大于该容差,因此将执行重采样。如果将镶嵌容差设置为 0.3,则会平移像素。

Double

MatchingMethod

(可选)

选择应用于栅格的色彩匹配方法。

  • NONE —当镶嵌栅格数据集时,此选项不会使用色彩匹配操作。
  • STATISTIC_MATCHING —此方法将使用重叠区域中的描述统计;然后将变换应用于整个目标数据集。
  • HISTOGRAM_MATCHING —此方法将引用重叠区域与源重叠区域的直方图进行匹配;然后将变换应用于整个目标数据集。
  • LINEARCORRELATION_MATCHING —此方法将对重叠像素进行匹配,然后对源数据集的其余部分进行插值;不具有一对一关系的像素将使用加权平均值。
String

派生输出

名称 说明 数据类型
output

已更新的栅格数据集。

栅格数据集

对应ArcMap工具

Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理_第4张图片

代码示例

Mosaic 示例 1(Python 窗口)

这是 Mosaic 工具的 Python 示例。

import arcpy
from arcpy import env
env.workspace = "c:/data"
arcpy.Mosaic_management("land2.tif;land3.tif","land1.tif","LAST","FIRST",
                        "0", "9", "", "", "")

Mosaic 示例 2(独立脚本)

这是 Mosaic 工具的 Python 脚本示例。

##==================================
##Mosaic
##Usage: Mosaic_management inputs;inputs... target {LAST | FIRST | BLEND | MEAN | MINIMUM | MAXIMUM} {FIRST | REJECT | LAST | MATCH} 
##                         {background_value} {nodata_value} {NONE | OneBitTo8Bit} {mosaicking_tolerance}  
##                         {NONE | STATISTIC_MATCHING | HISTOGRAM_MATCHING 
##                         | LINEARCORRELATION_MATCHING}

import arcpy
arcpy.env.workspace = r"\\workspace\PrjWorkspace\RasGP"

##Mosaic two TIFF images to a single TIFF image
##Background value: 0
##Nodata value: 9
arcpy.Mosaic_management("landsatb4a.tif;landsatb4b.tif","Mosaic\\landsat.tif","LAST","FIRST","0", "9", "", "", "")

##Mosaic several 3-band TIFF images to FGDB Raster Dataset with Color Correction
##Set Mosaic Tolerance to 0.3. Mismatch larget than 0.3 will be resampled
arcpy.Mosaic_management("rgb1.tif;rgb2.tif;rgb3.tif", "Mosaic.gdb\\rgb","LAST","FIRST","", "", "", "0.3", "HISTOGRAM_MATCHING")

代码实现

# -*- coding: utf-8 -*-
import os,arcpy,datetime
 
#读取和存放文件夹的位置
inputPath1 = r'H:\input1'#镶嵌数据文件夹1
inputPath2 =r'H:\input2'#镶嵌数据文件夹2
path=r'H:\outputMocaic'#输出结果存放文件夹
 
# start calculate time
startTime = datetime.datetime.now()
print startTime
 
# set the intermediate data folder #这段根据需要使用
intermediateDataPath = path+"\\"+"IntermediateData" #如果有中间文件就存放在这里
# set result data folder
resultDataPath = path+"\\"+"Result"
 
# determine if the folder exists
if os.path.exists(intermediateDataPath):
    print "IntermediateData floder exists"
else:
    # create a intermediate data floder
    arcpy.CreateFolder_management(path,"IntermediateData")
    
if os.path.exists(resultDataPath):
    print("Result floder exists")
else:   
    # create a result floder
    arcpy.CreateFolder_management(path, "Result")
    
print("-----------------------------------------------------------")
print("Under calculation......")
print("Please do not close the window.")
 
#这段为数据处理代码
# function:按顺序拼接字符串,作为波段组合函数的的参数
def getInputRasterParam(files):
    ret = []
    print "需要镶嵌的影像数据1系列:"
    for file in files:  # 拼接其他的
         if file.endswith(".tif"):
            print file 
            ret.append(file)
    return ret
def getInputShapefileParam(files):
    ret = []
    print "需要镶嵌的影像数据2系列:"
    for file in files:  # 拼接其他的
         if file.endswith(".shp"):
            print file 
            ret.append(file)
    return ret
 
arcpy.env.workspace = resultDataPath  #被裁剪栅格影像所在文件夹
arcpy.env.overwriteOutput = True#允许覆盖已有数据
files1 = os.listdir(inputPath1)
files2 = os.listdir(inputPath2)
print "-----------------------------------------"
input_param1 = getInputRasterParam(files1)
input_param2 = getInputRasterParam(files2)
#或者采用下面这种表达
#input_param=arcpy.ListRasters("*","tif")  #遍历文件夹下所有tif格式文件
 
print "-----------------------------------------"
i=0
for input1 in input_param1:
    print "开始镶嵌运算………………"
    print "-----------------------------------------"
    input_tif1=inputPath1+"\\"+input1
    result_tif=inputPath2+"\\"+input_param2[i]
    #把栅格数据1镶嵌到栅格数据2上
    arcpy.Mosaic_management(input_tif1,result_tif,"LAST","FIRST","-3000", "0", "", "", "")
    print result_tif+"镶嵌完成!"
    i+=1
 
print "Finish!"
endTime = datetime.datetime.now()
print "Time use: " + str((endTime - startTime).seconds)+ " (second)"
print "-----------------------------------------------------------"

运行结果:

Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理_第5张图片

Python遥感图像处理基础篇(三):arcpy遥感图像镶嵌批量处理_第6张图片

这里结果有缝隙,背景值计算的时候没处理好,需要调整参数。

 

你可能感兴趣的:(#,Python遥感图像处理,arcpy影像镶嵌)