焦点统计的工作原理

焦点统计所执行的运算可为一组重叠窗口或邻域中的输入像元计算统计数据。 为每个邻域中包含的所有输入像元计算统计数据(例如,平均值、最大值或总和)。

邻域处理

从概念上讲,算法会访问输入栅格中的每个像元,并计算落在其周围指定邻域形状内的像元的统计数据。 正在为其计算统计数据的像元称为处理像元。 处理像元的值通常包含在邻域统计计算中,但根据邻域的形状,它可能不包含在其中。 由于邻域将在扫描过程中重叠,因此一个处理像元的计算中包含的输入像元也可能用于另一个处理像元的计算。

有多种预定义的邻域形状可供选择。 您还可以创建自定义形状。 可以对邻域计算得出的统计数据包括众数、最大值、平均值、中值、最小值、少数、百分比数、范围、标准差、总和及变异度。

示例计算

要说明焦点统计的邻域处理过程,请考虑计算下图中值为 5 的处理像元周围邻域的“总和”统计量。 可以指定矩形 3 像元 x 3 像元邻域的形状,并将在计算中忽略 NoData 参数保留为默认选中设置。 相邻像元值的总和 (3 + 2 + 3 + 4 + 2 +1 + 4 = 19) 加上处理像元 (5) 的值等于 24 (19 + 5 = 24)。 与输入栅格中处理像元位置相同的输出栅格中的像元的值设为 24。

显示了示例 3x3 像元邻域的输入值和处理像元的输出总和值

以上逻辑示意图演示了如何在输入栅格中的单个像元上执行计算。 在以下逻辑示意图中,显示了所有输入像元的结果。 以黄色突出显示的像元用于标识与上述示例相同的处理像元和邻域。

显示了焦点总和运算的所有输入和输出值

NoData 像元

在计算中忽略 NoData 参数可控制邻域窗口内 NoData 像元的处理方式。 选中此参数(Python 中的 ignore_nodata = "DATA")时,处理像元输出值的计算将会忽略邻域中的所有 NoData 像元。 未选中此参数选项(Python 中的 ignore_nodata = "NODATA")时,如果邻域中存在任何 NoData 像元,则处理像元输出值将为 NoData。

如果待处理的像元本身是 NoData,则在选中在计算中忽略 NoData 选项后,将根据邻域中有效的其他像元来计算像元的输出值。 如果邻域中的所有像元均为 NoData,则输出将为 NoData。

角和边缘像元

当处理像元靠近输入栅格的角和边时,邻域中包含的像元数会相应调整。 也对统计量的计算进行了调整。

下图演示了如何根据各单个邻域中的可用像元为每个处理像元计算输出统计数据。 该过程从输入栅格的左上角开始,从左到右进行逐行扫描。 本示例中使用的邻域是 3 像元 x 3 像元矩形,使用的统计数据为总和。 将在计算中忽略 NoData 参数保留为默认选中设置。 在逻辑示意图中,邻域使用黄色轮廓线标出,处理像元使用青色轮廓线标出。

对于第一个处理像元,由于它位于输入栅格 6 像元 x 6 像元栅格的左上角,因此在邻域中只有四个像元可用。 如果将这些值加在一起,第一个像元的输出值将被指定为 11。 对于右侧的下一个像元,邻域中现在有六个像元,并将计算这些像元的总和。 将对第一行中的所有像元进行扫描。 为了节省空间,未显示所有处理像元。

将突出显示第一行输入像元中各处理像元周围的邻域,标识将使用哪些输入像元来计算输出像元值。
各处理像元(用青色轮廓)周围的邻域(黄色轮廓)用于标识哪些输入像元(顶部)将用于计算输出统计值(底部)。

请注意,在第一行中,左数第三个处理像元(值 = 1)的一个输入像元的值为 NoData。 由于该工具设置为忽略 NoData,因此在计算中将忽略此特定像元。 如果要计算的统计数据已设置为“平均值”而不是“总和”,则将计算邻域中所有非 NoData 像元的总和,然后除以 5。

对于第二行输入像元,第一个处理像元的统计数据将根据邻域中具有六个可用像元来计算。 对于下一个处理像元,计算中将考虑九个像元。 对于后续像元,将使用八个输入值进行计算,因为 3 x 3 邻域中的像元之一是 NoData。 继续对行中的其余像元执行此过程,然后继续对后续行执行此过程,直到完成对所有处理像元的分析为止。

显示了输入像元中第二行的邻域处理过程。
标识了第二行输入像元中的部分邻域、处理像元和输出值。

邻域大小和性能

该工具可以处理非常大的邻域。 但是,随着邻域大小的增加,性能会受到影响,因为每次计算中都会包含更多的输入像元。 相对于给定区域的其他邻域形状,矩形邻域类型具有可以提高性能的优化。

邻域在任何维度上的最大大小限制为 4,096 个像元。 这意味着矩形邻域在水平或垂直方向上都不能超过这个数量的像元。 对于圆形邻域,半径不能超过 2,047 个像元。

邻域类型

邻域可以是环形(圆环)、圆形、矩形或楔形。 通过使用核文件,也可自定义邻域形状,以及在计算统计数据之前将不同的权重分配给邻域中的各个特定像元。

以下是不同邻域形状的描述及其定义方法:

  • 环形
    • 环由两个圆组成,一个圆位于另一个圆的内侧,从而构成圆环。 邻域处理中将包括中心位于较小圆半径和较大圆半径之间的像元。 处于两个圆形之间的区域构成环形邻域。
    • 半径以像元或地图单位为单位,并沿垂直于 x 轴或 y 轴的方向进行测量。 当半径以地图单位指定时,其将转换为以像元为单位的半径。 所得的以像元为单位的半径会生成一个区域,该区域能够近似地表示出以原始的地图单位为半径时计算的区域。 在邻域处理中将包含环涵盖的所有像元中心。
    • 默认环形邻域具有一个像元的内半径以及三个像元的外半径。
    • 以下为环形邻域的示例图:

    具有默认环形邻域的处理像元
    具有默认环形邻域的处理像元(内半径 = 1 像元,外半径 = 3 像元)。

  • 圆形
    • 通过指定半径值来创建圆形邻域。
    • 半径以像元或地图单位为单位,并沿垂直于 x 轴或 y 轴的方向进行测量。 当半径按地图单位指定时,会使用附加逻辑条件来确定在处理邻域时要包含的像元。 首先,计算由指定半径值定义的圆的精确面积。 然后,再计算出另外两个圆面积值,一个是指定半径值向下舍入后的圆面积,另一个是指定半径值向上舍入后的圆面积。 这两个面积分别与用指定半径计算出的准确面积值进行比较,更为接近准确面积值的半径将被用于运算过程中。
    • 默认圆形邻域半径为三个像元。
    • 以下为圆形邻域的示例图:

    具有圆形邻域的处理像元
    具有圆形邻域的处理像元(半径 = 2 像元)。

  • 矩形
    • 通过提供以像元或地图单元为单位的宽度和高度值,指定矩形邻域。
    • 仅将中心在定义对象内的像元作为矩形邻域的一部分进行处理。
    • 默认矩形邻域为高和宽为三个像元的正方形。
    • 邻域范围内待处理像元相对于邻域左上角的 x,y 位置可通过以下方程式来确定:

      x =(邻域宽度 + 1)/2 y =(邻域高度 + 1)/2

      如果输入像元数为偶数,则使用截断来计算 x,y 坐标。 例如,在 5 X 5 的像元邻域中,x 和 y 值为 3,3。 而在 4 X 4 的邻域中,x 和 y 值则为 2,2。

    • 以下是两个矩形邻域的示例图示:

    具有两个矩形邻域的处理像元
    具有两个矩形邻域的处理像元。

  • 楔形
    • 楔形是由半径、起始角度和终止角度指定的饼形邻域。
    • 楔形按逆时针方向从起始角延伸到终止角。 角度以 0 到 360 的算术角度指定,其中 0 位于正 x 轴(3 点钟方向),并且可以是整数或浮点数。 也可使用负角度。
    • 半径以像元或地图单位为单位,并沿垂直于 x 轴或 y 轴的方向进行测量。 当半径以地图单位指定时,其将转换为以像元为单位的半径。 所得的以像元为单位的半径会生成一个区域,该区域能够近似地表示出使用原始的地图单位为半径时计算的区域。 在邻域处理中将包含楔形涵盖的所有像元中心。
    • 默认楔形邻域起始角度为 0 度,终止角度为 90 度,半径为三个像元。
    • 以下为楔形邻域的示例图:

    具有默认楔形邻域的处理像元
    具有默认楔形邻域的处理像元(半径 = 3 像元,起始角 = 0,终止角 = 90)。

  • 不规则
    • 允许您指定待处理像元周围形状不规则的邻域。
    • 不规则核文件可指定要包含在邻域范围内的像元位置。
    • 邻域范围内待处理像元相对于邻域左上角的 x,y 位置可通过以下方程式来确定:

      x =(宽度 + 1)/2 y =(高度 + 1)/2

      如果输入像元数为偶数,则使用截断来计算 x 和 y 坐标。

    • 以下内容适用于不规则邻域的核文件:

      • 不规则的核文件是一种 ASCII 文本文件,用于定义不规则邻域的值和形状。 可以使用任何纯文本编辑器来创建此文件。 文件扩展名必须是 .txt,且文件名中没有空格。
      • 第一行用于指定邻域的宽度和高度(x 方向的像元数,后跟一个空格,y 方向的像元数)。
      • 随后几行定义了用于其所代表邻域中每个位置的值。 各值之间需要添加一个空格。
      • 这些值定义了是否将邻域中的位置包括在计算中。 通常,值 1 用于标识要包含在不规则邻域计算中的位置,但可以使用除 0 以外的任何正值或负值。 也可以使用浮点值。
      • 要从计算中排除邻域中的位置,需在核文件中的相应位置使用值 0(不是空格)。

    • 以下示例显示了不规则核文件的内容及其代表的邻域:

    不规则核和相关邻域示例
    显示了一个不规则邻域核,以及将包含的要处理像元的图示。

  • 权重
    • 与不规则邻域类型相似,权重邻域用于定义像元周围的不规则形状邻域,还可以指定各输入值的权重。
    • 权重核文件可指定要包含在邻域范围内的像元位置及其权重。
    • 权重邻域仅适用于平均值、标准差和总和统计类型。
    • 邻域范围内待处理像元相对于邻域左上角的 x,y 位置可通过以下方程式来确定:

      x =(宽度 + 1)/2 y =(高度 + 1)/2

      如果输入像元数为偶数,则使用截断来计算 x 和 y 坐标。

    • 以下内容适用于权重邻域的核文件:

      • 加权核文件是一种 ASCII 文本文件,用于定义加权邻域的值和形状。 可以使用任何纯文本编辑器来创建此文件。 文件扩展名必须是 .txt,且文件名中没有空格。
      • 第一行用于指定邻域的宽度和高度(x 方向的像元数,后跟一个空格,y 方向的像元数)。
      • 随后几行定义了用于其所代表邻域中每个位置的值。 各值之间需要添加一个空格。
      • 对于总和统计数据,权重可以是任何正负整数值或浮点值。
      • 对于平均值和标准差统计数据,权重可以是任何正整数值或浮点值。 这些统计数据不允许使用负值,因此在计算中将忽略任何具有负权重的位置。
      • 要从计算中排除邻域中的位置,需在核文件中的相应位置使用值 0(不是空格)。

    • 以下示例显示了权重核文件的内容及其代表的邻域:

    加权核和相关邻域示例
    显示了一个加权邻域核,以及将包含的要处理像元的图示。

统计类型

可用的统计数据包括众数、最大值、平均值、中值、最小值、少数、百分比数、范围、标准差、总和及变异度。 默认统计类型为平均值。

某些统计类型仅在输入栅格为整型时可用。

  • 众数
    • 仅可将整型栅格用作输入。
    • 应确定每个邻域中每个唯一像元值的频率。 如果存在具有最高频率(出现频率最高)的单个值,则该值将分配给该邻域中的所有像元。 如果存在平局,则分配最低的平局值,除非处理像元的值是平局值之一。 在这种情况下,将返回处理像元值的原始值。
  • 最大值
    • 如果输入栅格值为整型,则输出栅格中的值也将为整型;如果输入栅格值为浮点型,则输出栅格中的值也将为浮点型。
  • 平均值
    • 输入可以是整型或浮点型栅格。
    • 输出栅格值始终为浮点型。
    • 对于权重邻域类型,此为受支持的统计数据类型子集。 有关如何计算此统计数据的详细信息,请参阅加权邻域部分。
  • 中值
    • 输入可以是整型或浮点型栅格。
    • 输出栅格值始终为浮点型。
    • 如果邻域中有效像元值数量为奇数,则将排列这些值然后选择位于中间的值得到中值。 如果邻域中的值为偶数,则先排序值,然后取中间两个值的平均值。
  • 最小值
    • 如果输入栅格值为整型,则输出栅格中的值也将为整型;如果输入栅格值为浮点型,则输出栅格中的值也将为浮点型。
  • 少数
    • 仅可将整型栅格用作输入。
    • 应确定每个邻域中每个唯一像元值的频率。 如果存在具有最低频率(出现频率最低)的单个值,则该值将分配给该邻域中的所有像元。 如果存在平局,则分配最低的平局值,除非处理像元的值是平局值之一。 在这种情况下,将返回处理像元值的原始值。
  • 百分比数
    • 输入可以是整型或浮点型栅格。
    • 输出栅格值始终为浮点型。
    • 百分比统计的结果基于以下公式计算 (Hyndman 与 Fan 合著,1996):
      pk = (k-1)/(n-1)
  • 范围
    • 如果输入栅格值为整型,则输出栅格中的值也将为整型;如果输入栅格值为浮点型,则输出栅格中的值也将为浮点型。
    • 通过应用以下公式可逐个像元地确定输出栅格中各个像元位置上的值:Focal Range = Focal Maximum – Focal Minimum
  • 标准差
    • 输出栅格值始终为浮点型。
    • 对于权重邻域类型,此为受支持的统计数据类型子集。 有关如何计算此统计数据的详细信息,请参阅加权邻域部分。
    • 标准差是在整个总体(N 方法)上计算求得,而不是在样本(N-1 方法)上进行估算。
  • 总和
    • 如果输入栅格值为整型,则输出栅格中的值也将为整型;如果输入栅格值为浮点型,则输出栅格中的值也将为浮点型。
    • 对于权重邻域类型,此为受支持的统计数据类型子集。 有关如何计算此统计数据的详细信息,请参阅加权邻域部分。
  • 变异度
    • 仅可将整型栅格用作输入。

加权邻域计算

可以通过应用权重来调整邻域中每个值对处理像元的最终结果的影响量。

在以下部分中,将显示用于计算加权平均值、标准差和总和统计数据结果的公式。 均附带一个示例,显示处理像元的计算和 3 x 3 像元矩形邻域的结果。

加权平均数统计

对于具有平均统计数据的权重邻域,中心处理像元的输出值是核权重值乘以输入值的乘积之和,再除以核权重值之和。

应用于邻域内像元的公式如下:

加权平均数等式

其中:

  • µW 是处理像元的人口加权平均值。
  • N 是邻域中的像元数。
  • wi 是在核中定义的权重值。
  • xi 是输入像元值。

旧版本:

在以前的版本中,计算使用邻域中的像元数作为分母。

权重值必须为正值,可以是整数值或浮点值。

示例

考虑以下值为 7 的处理像元及其周围八个相邻像元:

4 6 7 6 7 8 4 5 6

这些值的数学平均值(总和/计数)为 53 / 9 = 5.889。

考虑以下 3 x 3 加权像元核:

3 3 0.0 0.5 0.0 0.5 2.0 0.5 0.0 0.5 0.0

该核对中心单元的影响程度最高(权重为 2),四个正交相邻像元对处理单元的影响较小(权重为 0.5),四个角像元对处理像元没有影响(权重为 0)。

应用上面提供的加权平均数等式,下面显示了获取最终值的计算。

= (w1x1 + w2x2 + w3x3 + w4x4 + w5x5 + w6x6 + w7x7 + w8x8 + w9x9) / (w1 + w2 + w3 + w4 + w5 + w6 + w7 + w8 + w9) = ((0*4)+(0.5*6)+(0*7)+(0.5*6)+(2.0*7)+(0.5*8)+(0*4)+(0.5*5)+(0*6)) / (0 + 0.5 + 0 + 0.5 + 2.0 + 0.5 + 0 + 0.5 + 0) = (0 + 3.0 + 0 + 3.0 + 14.0 + 4.0 + 0 + 2.5 + 0) / (0.5 + 0.5 + 2.0 + 0.5 + 0.5) = (3.0 + 3.0 + 14.0 + 4.0 + 2.5) / 4.0 = 26.5 / 4.0 = 6.625

作为比较,九个输入像元的常规平均值为 5.889。 如果仅包含内核内的五个输入像元(其中权重不等于 0),但不考虑权重的值,则平均值将为 6.4(其中 6 + 6 + 7 + 8 + 5 = 32,然后除以 5)。

加权标准差统计

对于具有标准差统计数据的权重邻域,处理像元的输出值是以下等式的结果:

加权标准差等式

其中:

  • SDW 是处理像元的人口加权标准差值。
  • µW 是处理像元的人口加权平均值。
  • N 是邻域中的像元数。
  • wi 是在核中定义的权重值。
  • xi 是输入像元值。

权重值必须为正值,可以是整数值或浮点值。

如果邻域中的所有输入值都相同,则该处理像元的标准差值为 0。

示例

在此示例中将再次使用上述加权平均值示例中使用的相同邻域值。

4 6 7 6 7 8 4 5 6

还将使用相同的加权核值:

3 3 0.0 0.5 0.0 0.5 2.0 0.5 0.0 0.5 0.0

应用上面为值为 7 的中心处理像元提供的加权标准差等式,加权标准差计算的结果约为 0.85696。

加权总和统计

对于具有总和统计数据的权重邻域,处理像元的输出值是以下等式的结果:

加权总和等式

其中:

  • SW 是处理像元的加权总和值。
  • N 是邻域中的像元数。
  • wi 是在核中定义的权重值。
  • xi 是输入像元值。

权重值可以为正值或负值,可以是整数值或浮点值。

示例

考虑以下邻域输入值:

4 6 7 6 7 8 4 5 6

考虑以下 3 x 3 加权像元核:

3 3 -1 -2 -1 0 0 0 1 2 1

应用上面提供的等式,下面显示了获取最终值时使用的计算:

= (w1x1 + w2x2 + w3x3 + w4x4 + w5x5 + w6x6 + w7x7 + w8x8 + w9x9) = ((-1*4) + (-2*6) + (-1*7) + (0*6) + (0*7) + (0*8) + (1*4) + (2*5) + (1*6)) = (-4) + (-12) + (-7) + 4 + 10 + 6 = -3

参考资料

Hyndman, R.J. and Y. Fan, November 1996. "Sample Quantiles in Statistical Packages." The American Statistician 50 (4): 361-365.