ArcGIS教程:模糊隸屬
摘要
根據指定的模糊化演算法,將輸入柵格轉換為 0 到 1 數值範圍以指示其對某一集合的隸屬度。
值 1 表示完全隸屬於模糊集,而當值降為 0 時,則表示不是模糊集的成員。
用法
· 此工具無法對分類資料進行度量。要將分類資料用於模糊疊加分析,需要執行預處理操作。您可以建立一個模型或執行下列地理處理工具。首先,使用重分類工具獲得一個新的值域範圍(例如,1 到 100)。然後,將重分類結果除以某個因子(例如 100),以便將輸出值歸一化為介於 0.0 和 1.0 之間的值。
· 散度 (Spread) 可確定模糊隸屬度從 1 下降到 0 的速度。其值越大,中點周圍的模糊化就越陡。換言之,隨著散度(spread) 的減小,模糊隸屬度接近 0 的速度也將隨之降低。選擇合適的散度 (spread) 值是一個主觀過程,它取決於明確值的數值範圍。對於高斯函式和近鄰 (Near) 函式,使用預設值 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) 隸屬函式,輸入柵格必須為序列化的資料。最小值可以小於最大值以建立正斜率的函式,也可以大於最大值以建立負斜率的函式來適應這種變換。
如果最小值小於最大值,則使用正斜率函式進行變換;如果最小值大於最大值,則會使用負斜率函式。
語法
FuzzyMembership (in_raster, {fuzzy_function}, {hedge})
程式碼例項
模糊隸屬 (FuzzyMembership) 示例 1(Python 視窗)
該示例通過高斯函式建立了一個模糊隸屬度柵格,其中,距離中點 (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")
模糊隸屬 (FuzzyMembership) 示例 2(獨立指令碼)
該示例通過高斯函式和值為 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)
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute FuzzyMembership
outFuzzyMember = FuzzyMembership(inRaster, myFuzzyAlgorithm)
# Save the output
outFuzzyMember.save("c:/sapyexamples/fzymemb2")