按函数重设等级 (空间分析)

摘要

重设输入栅格值的等级,方法为应用所选变换函数,然后将结果值变换为指定的连续评估等级。

了解有关“按函数重设等级”工作原理的详细信息

使用情况

  • 与其他重分类方法相比,此工具的主要优势是对输入值的重分类有更高级别的控制:

    • 接收并直接处理连续输入值,而无需将这些值分为不同类别。
    • 允许对输入数据应用线性和非线性连续函数。
    • 将输入值等级重设为连续浮点型评估等级。

  • 查看此工具的基本词汇有助于理解下列说明。

  • 概念上,将输入数据重设为连续等级分为两步:

    1. 对输入栅格值应用指定的函数。
    2. 以线性方式将函数值变换为指定的评估等级。 在升序排列的评估等级中,将最小和最大函数值分别设置为指定的最小(自等级)和最大(至等级)评估等级。 但是,也可以将评估等级设置为降序排列。

  • 下图是一个幂函数图示例,用于介绍应用转换函数所涉及的常规概念和术语。

    幂函数图示例,其中指数值为 2,评估等级为 1 至 10
    幂函数图示例,其中指数值为 2,评估等级为 1 至 10

    此示例的输入数据范围是 3,000 至 5,000。 输入栅格中的最低值设置为阈值下限,最高值设置为阈值上限(如 x 轴所示),幂函数值限于(适用于)两个阈值之间。 形状控制参数(如幂函数的输入平移指数)定义函数的形状,通过该参数可控制函数的起始位置及其上升的幅度。 然后,将从幂函数得到的函数值线性转换为评估等级,以分配输出值。 在上图中,使用自等级至等级参数将评估等级定义为 1 至 10,如 y 轴所示。

  • 默认情况下,将输入栅格的最小值指定为阈值下限值,最大值指定为阈值上限值。

  • 默认情况下,指定函数值限于(适用于)阈值下限和上限之间,如有可能,使用输入栅格值。 以不同方式使用特定变换函数时,函数在阈值下限和上限间的拟合情况也有所不同,具体如下:

    • 按照定义,线性和对称线性函数均在将最小和最大函数值设置为输入栅格的最小值(阈值下限)和最大值(阈值上限)后进行拟合。
    • 将指数和对数的拟合版本应用到输入栅格的值。
    • 输入栅格获取尽可能多的参数(例如中点系数输入平移),以便获得高斯函数、邻近函数、小值函数、MS 小值函数、大值函数、MS 大值函数、幂函数、逻辑增长函数和逻辑衰减函数的最佳拟合。

  • 更改阈值下限阈值上限值后,将应用下列交互:

    1. 如果某输入像元的值低于阈值下限,则会将该值分配到低于阈值的值参数中设置的值。
    2. 如果某输入像元的值高于阈值上限,则会将该值分配到高于阈值的值参数中设置的值。
    3. 所有像元值(包括阈值下限阈值上限以及它们之间的值)均会根据函数值 f(x) 分配到相应的评估等级。 在某些情况下,更改形状控制参数(例如散度指数)后,输出栅格可能不会将任何像元分配到自等级至等级值。

  • 默认情况下,将计算定义函数形状的参数(例如散度基础系数),以便使函数在输入栅格的最小值和最大值之间实现最佳拟合(限制)。 但是,可以修改形状控制参数以使函数更好地适应现象与条件值之前的优先交互。 如果为任何形状控制参数指定了值,则会将生成的函数连同阈值上下限的值用于重设输入栅格值的等级;将不会使用拟合后的函数版本。

  • 使用自等级至等级来定义连续评估等级的上下限值。 将最小函数值指定为自等级值,将最大函数值指定为至等级值。 将中间的所有值分配到相应的评估值。

  • 评估等级可以从低到高(例如 1 到 10)或从高到低(例如 10 到 1)。

  • 低于阈值的值高于阈值的值分别分配到输入值低于或高于阈值的所有像元。 这些值直接分配给最终输出的栅格,并且在转换函数处理中不考虑这些像元。

  • 在工具对话框中更改阈值下限阈值上限后,通常将自动重新计算形状控制参数(定义函数形状的参数,例如散度基础系数)。 但是,更改形状控制参数后,阈值下限阈值上限值不会自动更改,如果阈值下限阈值上限随后发生更改,则更改的形状控制参数(以及任何其他的相关形状控制参数)将保留更改的设置且不会进行重新计算。

  • 函数的形状控制参数(例如散度基础系数)和阈值上下限均以针对当前处理范围像元大小捕捉栅格环境设置而计算的统计数据为基础。 如果未设置这些值,则将使用与输入栅格的完整范围相关的统计数据。

  • 在工具对话框中,如果输入栅格没有有效的统计数据来计算形状控制参数或确定阈值,则这些参数将为空,您将收到警告消息。 您需要单击计算统计数据按钮重新计算当前环境设置的统计数据以填充参数。 正确确定形状控制参数值后,会在处理范围内将阈值下限默认为最小值,将阈值上限默认为最大值。 在以下条件下您可能不具有有效统计数据:

    • 在启动工具对话框之前设置了环境处理范围、像元大小或捕捉栅格。
    • 输入栅格不具有统计数据。

  • 在工具对话框中输入输入栅格并指定函数后,如果更改环境处理范围、像元大小或捕捉栅格,则函数参数可能被设置为空(参数中没有值)。 单击计算统计数据按钮重新填充参数以查看新范围的值。 如果通过键入值更改了阈值下限阈值上限或任何形状控制参数,则工具会追踪到这些参数已进行了更改。 如果处理范围发生变化,则单击计算统计数据按钮后,指定的这些参数值将保持不变。

  • 可以将多个函数应用于输入栅格的不同范围。 为此,可通过多次运行按函数重设等级工具来连接函数,首先针对输入值的特定范围指定一个变换函数,然后再次运行该工具,将另一个函数应用到其他的值范围。 例如,随后将合并生成的输出栅格

    1. 运行按函数重设等级,将线性函数应用于 1,500 至 3,200 的输入值,并将高于和低于阈值的值设为 0。
    2. 在同一输入栅格中再次运行该工具,这一次将指数函数应用于 3,200 到 5,000 的值,并将高于和低于阈值的值设为 0。
    3. 使用工具同时添加两个生成的输出栅格。

参数

标注说明数据类型
输入栅格

输入要重设等级的栅格。

Raster Layer
变换函数
(可选)

指定用于转换输入栅格值的连续函数。

转换函数用于指定在重设输入数据等级时将使用的函数。 下表详细描述了每个函数的常规说明和默认值。

  • Exponential通过指数函数重设输入值的等级。适用情况:优先级随输入值增加而增加,并且优先级的增加速度因输入值增大而加快。
    • 输入平移 - 默认值从输入栅格中获取。
    • 基础系数 - 默认值从输入栅格中获取。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • Gaussian通过高斯函数重设输入值的等级。正态分布的中点将定义优先级最高的值,该中点通常指定为至等级。 由于最低和最高输入值通常会指定为自等级,因此优先级的值将随着输入值逐渐远离中点而降低,最终达到最低优先级。
    • 中点 - 默认值从输入栅格中获取。
    • 散度 - 默认值从输入栅格中获取。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • Large用于指示输入栅格值越大优先级越高。中点用于识别与大于中点的输入值的交叉点,其中大于中点的值优先级升高,而低于中点的值优先级下降。
    • 中点 - 默认值从输入栅格中获取。
    • 散度 - 默认值是 5。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • Linear通过线性函数重设输入值的等级。当最小值小于最大值时,较大的值优先级更高。
    • 最小值 - 默认值为输入栅格的最小值。
    • 最大值 - 默认值为输入栅格的最大值。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • Logarithm通过对数函数重设输入数据的等级。适用情况:较低输入值的优先级快速增加。 输入值越大,优先级越低,并且输入值将进一步增加。
    • 输入平移 - 默认值从输入栅格中获取。
    • 系数 - 默认值从输入栅格中获取。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • LogisticDecay通过逻辑衰减函数重设输入数据的等级。适用情况:小输入值的优先级最高,并且 优先级随值的增加而快速降低,直到值达到较大输入值时,优先级才会逐渐停止变化。
    • 最小值 - 默认值为输入栅格的最小值。
    • 最大值 - 默认值为输入栅格的最大值。
    • Y 截距百分比 - 默认值为 99.0。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • LogisticGrowth通过逻辑增长函数重设输入数据的等级。适用情况:较小输入值的优先级最低。 优先级随值的增加而快速增加,直到值达到较大输入值时,优先级才会逐渐停止变化。
    • 最小值 - 默认值为输入栅格的最小值。
    • 最大值 - 默认值为输入栅格的最大值。
    • Y 截距百分比 - 默认值为 1.0。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • MSLarge在输入栅格值越大优先级越高的情况下,基于平均值和标准差重设输入数据的等级。结果可能与大值函数类似,具体取决于平均值和标准差的乘数定义方式。
    • 平均值乘数 - 默认值是 1。
    • 标准差乘数 - 默认值是 1。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • MSSmall在输入栅格值越小优先级越高的情况下,基于平均值和标准差重设输入数据的等级。结果可能与小值函数类似,具体取决于平均值和标准差的乘数定义方式。
    • 平均值乘数 - 默认值是 1。
    • 标准差乘数 - 默认值是 1。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • Near适用情况:非常靠近中点的输入值优先级较高。近邻函数类似于高斯函数,但下降速度更快。
    • 中点 - 默认值从输入栅格中获取。
    • 散度 - 默认值从输入栅格中获取。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • Power使用指定指数应用幂函数,重设输入数据的等级。适用情况:输入值的优先级随输入值的增加而快速增加。
    • 输入平移 - 默认值从输入栅格中获取。
    • 指数 - 默认值从输入栅格中获取。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • Small用于指示输入栅格值越小优先级越高。中点用于识别与大于中点的输入值的交叉点,其中低于中点的值优先级升高,而大于中点的值优先级下降。
    • 中点 - 默认值从输入栅格中获取。
    • 散度 - 默认值是 5。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。
  • SymmetricLinear通过在最小值和最大值的中点处镜像线性函数,重设输入数据的等级。适用情况:某个特定输入值的优先级最高,且优先级随着输入值远离该点而以线性方式降低。
    • 最小值 - 默认值为输入栅格的最小值。
    • 最大值 - 默认值为输入栅格的最大值。
    • 阈值下限 - 默认值为输入栅格的最小值。
    • 小于阈值的值 - 默认值为自等级值。
    • 阈值上限 - 默认值为输入栅格的最大值。
    • 大于阈值的值 - 默认值为至等级值。

默认变换为 MS 小值。

Transformation function
自等级
(可选)

输出评估等级的起始值。

自等级的值不能等于至等级的值。 自等级的值可以低于或高于至等级的值(例如,等级范围可以从 1 至 10 或从 10 至 1)。

该值必须为正,且可以是整型值或双精度值。

默认值为 1。

Double
至等级
(可选)

输出评估等级的结束值。

至等级的值不能等于自等级的值。 至等级的值可以低于或高于自等级的值(例如,等级范围可以从 1 至 10 或从 10 至 1)。

该值必须为正,且可以是整型值或双精度值。

默认值为 10。

Double

返回值

标注说明数据类型
输出栅格

输出的已重设等级的栅格。

输出将是浮点型栅格,其值的范围为评估值 from_scale 到评估值 to_scale(或在两者之内)。

Raster

RescaleByFunction(in_raster, {transformation_function}, {from_scale}, {to_scale})
名称说明数据类型
in_raster

输入要重设等级的栅格。

Raster Layer
transformation_function
(可选)

指定用于转换输入栅格的连续函数。

变换函数类用于指定变换函数的类型。

变换函数类的类型有:

采用哪种变换函数取决于哪种函数能够最好地捕捉现象的优先级与输入值之间的相互作用。 要更好地理解阈值上下限如何影响输出值,并获得控制阈值的参数的详细信息,请参阅阈值下限和阈值上限对输出值的交互作用

变换函数类的形式如下:

  • TfExponential({shift}, {baseFactor}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfGaussian({midpoint}, {spread}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfLarge({midpoint}, {spread}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfLinear({minimum}, {maximum}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfLogarithm({shift}, {factor}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfLogisticDecay({minimum}, {maximum}, {yInterceptPercent}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfLogisticGrowth({minimum}, {maximum}, {yInterceptPercent}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfMSLarge({meanMultiplier}, {STDMultiplier}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfMSSmall({meanMultiplier}, {STDMultiplier}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfNear({midpoint}, {spread}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfPower({shift}, {exponent}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfSmall({midpoint}, {spread}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})
  • TfSymmetricLinear({minimum}, {maximum}, {lowerThreshold}, {valueBelowThreshold}, {upperThreshold}, {valueAboveThreshold})

默认变换为 TfMSSmall。

变换函数的默认参数包含以下几项:

  • baseFactor(对于 TfExponential)从输入栅格中获取。
  • exponent(对于 TfPower)从输入栅格中获取。
  • factor(对于 TfLogarithm)从输入栅格中获取。
  • lowerThreshold(对于所有函数)设置为输入栅格的“最小值”。
  • maximum(对于 TfLinear、TfLogisticDecay、TfLogisticGrowth 和 TfSymmetricLinear)设置为输入栅格的“最大值”。
  • meanMultiplier(对于 TfMSLarge 和 TfMSSmall)是 1。
  • midpoint(对于 TfGaussian 和 TfNear)设置为输入栅格的值范围的中点。
  • midpoint(对于 TfLarge 和 TfSmall)设置为输入栅格的平均值。
  • minimum(对于 TfLinear、TfLogisticDecay、TfLogisticGrowth 和 TfSymmetricLinear)设置为输入栅格的“最小值”。
  • shift(对于 TfExponential、TfLogarithm 和 TfPower)从输入栅格中获取。
  • spread(对于 TfGaussian 和 TfNear)从输入栅格中获取。
  • spread(对于 TfLarge 和 TfSmall)是 5。
  • STDMultiplier(对于 TfMSLarge 和 TFMSSmall)是 1。
  • upperThreshold(对于所有函数)设置为输入栅格的“最大值”。
  • valueAboveThreshold(对于所有函数)设置为 to_scale 值。
  • valueBelowThreshold(对于所有函数)设置为 from_scale 值。
  • yInterceptPercent(对于 TfLogisticDecay)是 99.0000。
  • yInterceptPercent(对于 TfLogisticGrowth)是 1.0000。

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

代码示例

RescaleByFunction 示例 1(Python 窗口)

此示例创建了一个栅格,并使用 MSSmall 函数重设了此栅格值的等级。

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")
RescaleByFunction 示例 2(独立脚本)

演示了如何在高程数据上使用此工具,其中低海拔位置比高海拔位置优先级更高。 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

# Execute RescaleByFunction
outRescale = RescaleByFunction(inRaster, myTfFunction, fromscale, toscale)

# Save the output
outRescale.save("c:/sapyexamples/rescaletfms2")