【发布时间】:2017-01-29 20:37:42
【问题描述】:
我有一个大的 numpy 2d (10000,10000) 有许多区域(具有相同单元格值的集群单元格)。我想要的是合并显示超过 35% 边界重叠的相邻区域。这种重叠应该通过将与邻居的公共边界的大小除以该区域的总边界大小来衡量。
我知道如何检测相邻区域 (Look here),但我不知道如何测量边界重叠。
当我使用大型数组时,矢量化解决方案将是最理想的。
示例
#input
region_arr=np.array([[1,1,3,3],[1,2,2,3],[2,2,4,4],[5,5,4,4]])
邻居检测脚本的输出是一个 numpy 二维数组,第一列是区域,第二列是邻居。
#result of neighbour detection
>>> region_neighbour=detect_neighbours(region_arr)
>>> region_neighbour
array([[1, 2],
[1, 3],
[2, 1],
[2, 3],
[2, 4],
[2, 5],
[3, 1],
[3, 2],
[3, 4],
[4, 2],
[4, 3],
[4, 5],
[5, 2],
[5, 4]])
我想在邻居检测结果中添加一列,其中包含区域与其邻居之间的百分比重叠。 区域 1 和 3 之间的重叠百分比 = 1/8 = 0.125 = 区域 1 的共同边界大小/总边界大小。
在此示例中,所需的输出如下所示:
#output
>>> percentual_overlap=measure_border_overlap(region_arr,region_neighbour)
>>> percentual_overlap
array([[ 1. , 3. , 0.125 ],
[ 1. , 2. , 0.375 ],
[ 2. , 1. , 0.3 ],
[ 2. , 3. , 0.3 ],
[ 2. , 4. , 0.2 ],
[ 2. , 5. , 0.2 ],
[ 3. , 1. , 0.125 ],
[ 3. , 2. , 0.25 ],
[ 3. , 4. , 0.125 ],
[ 4. , 2. , 0.375 ],
[ 4. , 3. , 0.125 ],
[ 4. , 5. , 0.125 ],
[ 5. , 2. , 0.333333],
[ 5. , 4. , 0.166667]])
使用此输出,合并重叠超过 35% 的区域(区域 1 和 2;区域 4 和 2)相对容易。区域合并后新数组将如下所示:
编辑
您可以通过应用pv.的函数来计算每个区域的周长。
【问题讨论】:
标签: python arrays numpy multidimensional-array vectorization