需要 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 来获得新的范围。
执行的模糊限制语是 Very 和 Somewhat。Very 也称为收缩,被定义为模糊隶属度函数的平方。Somewhat 也称为膨胀或 More or Less,是模糊隶属度函数的平方根。Very 和 Somewhat 模糊限制语可分别减小和增大模糊隶属度函数。
小值 (Small) 和大值 (Large) 隶属度函数不接受负值。
对于线性 (Linear) 隶属度函数,输入栅格必须为有序数据。最小值可以小于最大值以创建正斜率的函数,也可以大于最大值以创建负斜率的函数来适应这种变换。
如果最小值小于最大值,则会将正斜率函数用于变换;如果最小值大于最大值,则会使用负斜率函数。
有关适用于此工具的地理处理环境的详细信息,请参阅分析环境和 Spatial Analyst。
语法
FuzzyMembership(in_raster, {fuzzy_function}, {hedge})
参数 | 说明 | 数据类型 |
in_raster | 值域从 0 到 1 的输入栅格。 它可以是整型栅格或浮点型栅格。 | Raster Layer |
fuzzy_function (可选) | 指定用于模糊化输入栅格的算法。 模糊类用于指定隶属度的类型。 可用的隶属度类型为: 各类隶属度的形式如下:
| Fuzzy function |
hedge (可选) | 定义模糊限制语将增大或减小可修改模糊集含义的模糊隶属度值。模糊限制语在帮助控制条件或重要属性时非常有用。
| String |
返回值
名称 | 说明 | 数据类型 |
out_raster | 输出为浮点型栅格,取值范围是 0 到 1。 | Raster |
代码示例
该示例通过高斯函数创建了一个模糊隶属度栅格,其中,距离中点 (1,200 ft) 较近的高程值的隶属度值较大。
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")
该示例通过高斯函数和值为 0.4 的散度创建了一个模糊隶属度栅格,其中,距离中点 (1,000 ft) 较近的高程值的隶属度较大。
# 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")
许可信息
- Basic: 需要 Spatial Analyst
- Standard: 需要 Spatial Analyst
- Advanced: 需要 Spatial Analyst