按函数重设等级 (Spatial Analyst)
用法
与其他重分类方法相比,此工具的主要优势是对输入值的重分类有更高级别的控制:
- 接收并直接处理连续输入值,而无需将这些值分为不同类别。
- 允许对输入数据应用线性和非线性连续函数。
- 将输入值等级重设为连续浮点型评估等级。
查看此工具的基本词汇有助于理解下列说明。
-
概念上,将输入数据重设为连续等级分为两步:
- 对输入栅格值应用指定的函数。
- 以线性方式将函数值变换为指定的评估等级。在升序排列的评估等级中,将最小和最大函数值分别设置为指定的最小(自等级)和最大(至等级)评估等级。但是,也可以将评估等级设置为降序排列。
下图为幂函数示例图,介绍了应用变换函数相关的一般概念和术语。
此示例的输入数据范围是 3,000 至 5,000。输入栅格中的最低值设置为阈值下限,最高值设置为阈值上限(如 x 轴所示),幂函数值限于(适用于)两个阈值之间。形状控制参数(如幂函数的输入平移和指数)定义函数的形状,通过该参数可控制函数的起始位置及其上升的幅度。幂函数生成的函数值随即会以线性方式变换为评估等级以分配输出值。在上图中,使用自等级和至等级参数将评估等级定义为 1 至 10,如 y 轴所示。
默认情况下,将输入栅格的最小值指定为阈值下限值,最大值指定为阈值上限值。
默认情况下,指定函数值限于(适用于)阈值下限和上限之间,如有可能,使用输入栅格值。以不同方式使用特定变换函数时,函数在阈值下限和上限间的拟合情况也有所不同,具体如下:
- 按照定义,线性和对称线性函数均在将最小和最大函数值设置为输入栅格的最小值(阈值下限)和最大值(阈值上限)后进行拟合。
- 将指数和对数函数的拟合版本应用到输入栅格的值。
- 从输入栅格获取尽可能多的参数(例如中点、系数和输入平移),以便获得高斯函数、邻近函数、小值函数、MS 小值函数、大值函数、MS 大值函数、幂函数、逻辑增长函数和逻辑衰减函数的最佳拟合。
-
更改阈值下限和阈值上限值后,将应用下列交互:
- 如果某输入像元的值低于阈值下限,则会将该值分配到低于阈值的值参数中设置的值。
- 如果某输入像元的值高于阈值上限,则会将该值分配到高于阈值的值参数中设置的值。
- 所有像元值(包括阈值下限和阈值上限以及它们之间的值)均会根据函数值 f(x) 分配到相应的评估等级。在某些情况下,更改形状控制参数(例如散度和指数)后,输出栅格可能不会将任何像元分配到自等级或至等级值。
默认情况下,将计算定义函数形状的参数(例如散度或基础系数),以便使函数在输入栅格的最小值和最大值之间实现最佳拟合(限制)。但是,可更改形状控制参数,以优化函数对现象与条件值间优先交互的拟合。如果为任何形状控制参数指定了值,则会将生成的函数连同阈值上下限的值用于重设输入栅格值的等级;将不会使用拟合后的函数版本。
使用自等级和至等级来定义连续评估等级的上下限值。将最小函数值指定为自等级值,将最大函数值指定为至等级值。所有介于最大值与最小值之间的函数值均指定为相应的评估值。
评估等级可设置为由低到高(如 1 至 10)或由高到低(如 10 至 1)。
-
将低于阈值的值和高于阈值的值分别分配到输入值低于或高于阈值的所有像元。这些值都将直接分配到最终输出栅格,且在变换函数的处理过程中不考虑这些像元。
在工具对话框中更改阈值下限或阈值上限后,通常将自动重新计算形状控制参数(定义函数形状的参数,例如散度或基础系数)。但是,更改形状控制参数后,阈值下限和阈值上限值不会自动更改,如果阈值下限或阈值上限随后发生更改,则更改的形状控制参数(以及任何其他的相关形状控制参数)将保留更改的设置且不会进行重新计算。
函数的形状控制参数(例如散度或基础系数)和阈值上下限均以针对当前处理范围、像元大小和捕捉栅格环境设置而计算的统计数据为基础。如果这些内容均未设置,则会使用与输入栅格全图相关的统计数据。
在工具对话框中,如果输入栅格不具有可计算形状控制参数或确定阈值的有效统计数据,那么这些参数将为空并且您会收到一条警告消息。您需要单击计算统计数据按钮重新计算当前环境设置的统计数据以填充参数。正确确定形状控制参数值后,会在处理范围内将阈值下限默认为最小值,将阈值上限默认为最大值。在以下条件下您可能不具有有效统计数据:
- 在启动工具对话框之前设置了环境处理范围、像元大小或捕捉栅格。
- 输入栅格不具有统计数据。
在工具对话框中,如果在输入了输入栅格且指定了函数后对环境处理范围、像元大小或捕捉栅格进行更改,则函数参数可能会设为空(参数未赋值)。单击计算统计数据按钮重新填充参数以查看新范围的值。如果通过键入值更改了阈值下限、阈值上限或任何形状控制参数,则工具会追踪到这些参数已进行了更改。如果处理范围发生变化,则单击计算统计数据按钮后,指定的这些参数值将保持不变。
可将多个函数应用于输入栅格的不同范围。为此,可通过多次运行按函数重设等级工具来连接函数,首先针对输入值的特定范围指定一个变换函数,然后再次运行该工具,将另一个函数应用到其他的值范围。随后将合并生成的输出栅格,例如:
- 运行按函数重设等级,将线性函数应用于 1,500 至 3,200 的输入值,并将高于和低于阈值的值设为 0。
- 在同一输入栅格中再次运行该工具,这一次将指数函数应用于 3,200 到 5,000 的值,并将高于和低于阈值的值设为 0。
- 使用加工具同时添加两个生成的输出栅格。
语法
参数 | 说明 | 数据类型 |
in_raster |
要重设等级的输入栅格。 | Raster Layer |
transformation_function (可选) |
指定连续函数以变换输入栅格。 变换函数类用于指定变换函数的类型。 变换函数类的类型有:
采用哪种变换函数取决于哪种函数能够最好地捕捉现象的优先级与输入值之间的相互作用。要更好地理解阈值上下限如何影响输出值,并获得控制阈值的参数的详细信息,请参阅阈值下限和阈值上限对输出值的交互作用。 以下为变换函数类的形式:
默认的变换函数为 TfMSSmall。 各个变换函数的默认参数包括:
| Transformation function |
from_scale (可选) |
输出评估等级的起始值。 from_scale 的值不能等于 to_scale 的值。from_scale 的值可以低于或高于 to_scale 的值(例如,范围可以从 1 至 10 或从 10 至 1)。 该值必须为正,且可以是整型值或双精度值。 默认值为 1。 | Double |
to_scale (可选) |
输出评估等级的结束值。 to_scale 的值不能等于 from_scale 的值。to_scale 的值可以低于或高于 from_scale 的值(例如,范围可以从 1 至 10 或从 10 至 1)。 该值必须为正,且可以是整型值或双精度值。 默认值为 10。 | Double |
返回值
名称 | 说明 | 数据类型 |
out_raster |
输出的已重设等级的栅格。 将输出浮点型栅格,其值的范围为 from_scale 评估值到 to_scale 评估值(或在两者之内)。 | Raster |
代码实例
本示例将创建一个栅格,该栅格的值使用 MS 小值函数重设等级。
import arcpy
from arcpy.sa import *
from arcpy import env
env.workspace = "c:/sapyexamples/data"
outRescale = RescaleByFunction("elevation", TfMSSmall(1.25, 1.5, "#", "#", 4000, "NoData"), 1, 10)
outRescale.save("c:/sapyexamples/rescaletfms1")
演示使用此工具处理高程数据,其中高程较低的位置的优先级要远高于高程较高的位置。4,000 米以上的位置均设置为 NoData。
# Name: TfMSSmall_Ex_02.py
# Description: Rescales input raster data using a MSSmall function and
# transforms the function values onto a specified evaluation scale.
# Requirements: Spatial Analyst Extension
# Author: esri
# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *
# Set environment settings
env.workspace = "C:/sapyexamples/data"
# Set local variables
inRaster = "elevation"
# Create the TfMSSmall object
meanmult = 1.25
stdmult = 1.5
lowerthresh = "#"
valbelowthresh = "10"
upperthresh = 4000
valabovethresh = "NoData"
myTfFunction = TfMSSmall(meanmult, stdmult, lowerthresh, valbelowthresh, upperthresh, valabovethresh)
# Set evaluation scale
fromscale = 1
toscale = 10
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute RescaleByFunction
outRescale = RescaleByFunction(inRaster, myTfFunction, fromscale, toscale)
# Save the output
outRescale.save("c:/sapyexamples/rescaletfms2")