模糊隶属度 (空间分析)

需要 Spatial Analyst 许可。

摘要

根据指定的模糊化算法,将输入栅格转换为 0 到 1 数值范围以指示其对某一集合的隶属度。

值 1 表示模糊集中的完全隶属度,隶属度减少到 0 时,表示它不是模糊集中的成员。

了解有关“模糊隶属度”工作原理的详细信息

使用情况

  • 此工具不会改变分类数据的大小。 要将分类数据包括在模糊叠加分析中,必须执行预处理步骤。 您可以创建模型或运行下列地理处理工具。 首先,使用重分类工具获得新的值范围(例如,1 到 100)。 然后,将结果除以某个因子(例如 100),以便将输出值归一化为介于 0.0 和 1.0 之间的值。

  • 散度 (spread) 定义了模糊隶属度的值从 1 向 0 下降的快慢程度。 值越大,模糊化在中点附近变化越急剧。 换言之,随着散度的减小,模糊隶属度接近 0 的速度也随之降低。 选择合适的散度 (spread) 值是一个主观过程,它取决于明确值的数值范围。 对于高斯函数和近邻函数,使用默认值 0.1 作为起点很合适。 通常,值分别在 [0.01–1] 或 [0.001-1] 的范围内变化。 对于小值 (Small) 函数和大值 (Large) 函数,适合使用默认值 5 作为起点,此时,通常值在 1 和 10 之间变化。

    散度对高斯模糊隶属度的影响图
    散度对高斯模糊隶属度的影响。

  • 有时,可能会出现没有任何一个输入值可以保证 100% 属于指定集合的情况。 也就是说,没有输入值的模糊隶属度为 1。 这种情况下,可能需要重新调整模糊隶属度的大小以反映出新的范围。 例如,如果输入值的最高隶属度为 0.75,则可以通过将每个模糊隶属度值乘以 0.75 来建立新的比例。

  • 执行的模糊限制语是 VerySomewhatVery 也称为收缩,被定义为模糊隶属度函数的平方。 Somewhat 也称为膨胀或 More or Less,是模糊隶属度函数的平方根。 VerySomewhat 模糊限制语可分别减小和增大模糊隶属度函数。

  • 小值和大值隶属函数不接受负值。

  • 对于线性 (Linear) 隶属度函数,输入栅格必须为有序数据。 最小值可以小于最大值以创建正斜率,或大于最大值以创建负斜率,从而进行转换。

    如果最小值小于最大值,则使用正斜率函数进行转换;如果最小值小于最大值,则使用负斜率函数。

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

参数

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

其值将从 0 缩放到 1 的输入栅格。

它可以是整型栅格或浮点型栅格。

Raster Layer
隶属度类型
(可选)

指定用于模糊化输入栅格的算法。

隶属度类型的某些设置使用散度参数来确定模糊隶属度从 1 变为 0 的下降速度。 散度参数的默认值在下表中进行了详细说明。

  • Gaussian在中点处指定隶属度值 1。对于沿正态曲线偏离中点的值,隶属度将降为 0。 高斯函数与近邻 (Near) 函数类似,但高斯函数的散度 (spread) 更小。
    • 中点 - 默认值为输入栅格的值范围的中点。
    • 散度 - 默认值是 0.1。 通常,值在 [0.01–1] 内变化。
  • Small用于指示输入栅格的小值在模糊集中具有较高隶属度。在中点处指定隶属度值 0.5。
    • 中点 - 默认值为输入栅格的值范围的中点。
    • 散度 - 默认值是 5。
  • Large用于指示输入栅格的大值在模糊集中具有较高隶属度。在中点处指定隶属度值 0.5。
    • 中点 - 默认值为输入栅格的值范围的中点。
    • 散度 - 默认值是 5。
  • Near计算接近某个中间值的值的隶属度。在中点处指定隶属度值 1。 对于偏离中点的值,隶属度将降为 0。
    • 中点 - 默认值为输入栅格的值范围的中点。
    • 散度 - 默认值是 0.1。 通常,值在 [0.001–1] 的范围内变化。
  • MSLarge根据输入数据的平均值和标准差计算隶属度,输入数据中的大值具有较高隶属度。结果可能与大值函数类似,具体取决于平均值和标准差的乘数定义方式。
    • 平均值乘数 - 默认值是 1。
    • 标准差乘数 - 默认值是 2。
  • MSSmall根据输入数据的平均值和标准差计算隶属度,输入数据中的小值具有较高隶属度。 此为默认隶属度类型。结果可能与小值函数类似,具体取决于平均值和标准差的乘数定义方式。
    • 平均值乘数 - 默认值是 1。
    • 标准差乘数 - 默认值是 2。
  • Linear根据输入栅格的线性变换计算隶属度。分配介于最小值 0 和最大值 1 之间的隶属度值。
    • 最小值 - 默认值是 1。
    • 最大值 - 默认值是 2。
Fuzzy function
模糊限制语
(可选)

定义模糊限制语将增大或减小可修改模糊集含义的模糊隶属度值。 模糊限制语在帮助控制条件或重要属性时非常有用。

  • 不应用模糊限制语。 这是默认设置。
  • Somewhat也称为膨胀,被定义为模糊隶属度函数的平方根。 该模糊限制语可增大模糊隶属度函数。
  • Very也称为收缩,被定义为模糊隶属度函数的平方。 该模糊限制语可减小模糊隶属度函数。
String

返回值

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

输出将是浮点型栅格,其值范围为 0 到 1。

Raster

FuzzyMembership(in_raster, {fuzzy_function}, {hedge})
名称说明数据类型
in_raster

其值将从 0 缩放到 1 的输入栅格。

它可以是整型栅格或浮点型栅格。

Raster Layer
fuzzy_function
(可选)

指定用于模糊化输入栅格的算法。

模糊类用于指定隶属度的类型。

隶属度类的类型包括:

各类隶属度的形式如下:

  • FuzzyGaussian({midpoint},{spread})
  • FuzzyLarge({midpoint},{spread})
  • FuzzyLinear({minimum},{maximum})
  • FuzzyMSLarge({meanMultiplier},{STDMultiplier})
  • FuzzyMSSmall({meanMultiplier},{STDMultiplier})
  • FuzzyNear({midpoint},{spread})
  • FuzzySmall({midpoint},{spread})

Fuzzy function
hedge
(可选)

定义模糊限制语将增大或减小可修改模糊集含义的模糊隶属度值。 模糊限制语在帮助控制条件或重要属性时非常有用。

  • NONE不应用模糊限制语。 这是默认设置。
  • SOMEWHAT也称为膨胀,被定义为模糊隶属度函数的平方根。 该模糊限制语可增大模糊隶属度函数。
  • VERY也称为收缩,被定义为模糊隶属度函数的平方。 该模糊限制语可减小模糊隶属度函数。
String

返回值

名称说明数据类型
out_raster

输出将是浮点型栅格,其值范围为 0 到 1。

Raster

代码示例

FuzzyMembership 示例 1(Python 窗口)

此示例使用高斯函数创建了模糊隶属度栅格,其中更接近中点 (1,200 英尺) 的高程值具有更高的隶属度值。

import arcpy
from arcpy.sa import *
from arcpy import env
env.workspace = "c:/sapyexamples/data"
outFzyMember = FuzzyMembership("elevation", FuzzyGaussian(1200, 0.06))
outFzyMember.save("c:/sapyexamples/fzymemb")
FuzzyMembership 示例 2(独立脚本)

此示例使用高斯函数和值为 0.4 的散度创建了模糊隶属度栅格,其中更接近中点 (1,000 英尺) 的高程值具有更高的隶属度值。

# Name: FuzzyMembership_Ex_02.py
# Description: Scales input raster data into values ranging from zero to one
#     indicating the strength of a membership in a set. 
# Requirements: Spatial Analyst Extension

# 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 FuzzyGaussian algorithm object
midpoint = 1000
spread = 0.4
myFuzzyAlgorithm = FuzzyGaussian(midpoint, spread)

# Execute FuzzyMembership
outFuzzyMember = FuzzyMembership(inRaster, myFuzzyAlgorithm)

# Save the output
outFuzzyMember.save("c:/sapyexamples/fzymemb2")