1. 程式人生 > >ArcGIS教程:模糊隸屬

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")