按函数重设等级 (Spatial Analyst)

需要 Spatial Analyst 许可。

描述

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

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

使用方法

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

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

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

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

    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. 使用工具同时添加两个生成的输出栅格。

  • 有关适用于此工具的地理处理环境的详细信息,请参阅分析环境和 Spatial Analyst

语法

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 窗口)

本示例将创建一个栅格,该栅格的值使用 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")
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")

许可信息

  • Basic: 需要 Spatial Analyst
  • Standard: 需要 Spatial Analyst
  • Advanced: 需要 Spatial Analyst

相关主题