计算R中矩阵中相邻单元格的外边缘

时间:2018-05-17 17:37:36

标签: r

我正在研究一些网格温度数据,我将其分类为一个矩阵,其中每个单元格可以是两个类别中的一个 - 简单来说,假设为0或1。对于每个课程,我想计算补丁统计数据,从FRAGSTATS获取灵感,用于景观生态学,以表征栖息地斑块的形状和大小。

就我的目的而言,补丁是同一类的相邻单元的集群。这是一个示例矩阵mat

mat <- 
matrix(c(0,1,0,
         1,1,1,
         1,0,1), nrow = 3, ncol  = 3, 
       byrow = TRUE)

0    1    0
1    1    1
1    0    1

mat中的所有1都形成一个补丁(我们将忽略0),为了计算各种不同的形状指标,我需要能够计算周长(即外边缘的数量) 。

修改 对不起,我显然无法发布图像,因为我没有足够的声誉,但你可以在下面的G5W答案的黑线中看到1的外边框代表我所指的外边缘。

手动我可以算一下1s的补丁有14个外边缘,我知道区域(即单元格数)是6.基于He et al.this other question的论文,我想到了如何计算内边缘的数量(本例中为5),但我真的很难为外边缘做同样的事情!我认为这与贴片形状与具有较小面积的最大整数正方形(在这种情况下为2 x 2平方)相比有所不同,但到目前为止,我的研究和思考都无济于事。

N.B。我知道包SDMTools,它可以计算各种FRAGSTATS指标。很遗憾,返回的指标过于严格,例如而不仅仅是聚合索引,我需要知道用于计算它的实际数字(观察到的共享边数/最大共享边数)。

这是我在这里发表的第一篇文章,所以我希望它足够详细!在此先感谢:)

1 个答案:

答案 0 :(得分:0)

如果您知道区域和内边缘的数量,则可以很容易地计算外边缘的数量。每个贴片都有四个边缘,所以在某种程度上,边缘的总数是4 *面积。但这并不完全正确,因为每个内部边缘都在两个补丁之间共享。所以正确的总边数是

  

4 *区域 - 里面

外边缘的数量是总边缘减去内边缘,所以

  

outside = total - inside =(4 * area- inside) - inside = 4 * area - 2 * inside。

Patch

你可以看到该区域由6个正方形组成,每个正方形有4个边。内边缘(红色边缘)由两个相邻的正方形共享。