- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的目标如下:给定一个二维数组和一个可以放在数组顶部的多边形,我想提取多边形内的值(包括边界)并对这些值求和。
假设我有一个这样的二维数组:
1 6 8 4 2 3
5 4 1 3 7 9
1 0 2 3 4 8
6 7 0 5 7 4
0 1 2 5 4 2
假设我有一个具有以下顶点的多边形:
(1, 2)
(2, 3)
(3, 3)
(4, 2)
(4, 1)
(3, 1)
(2, 1)
(1, 2)
将多边形放置在数组顶部会产生以下结果:
_ _ _ _ _ _
_ _ 1 _ _ _
_ 0 2 3 _ _
_ 7 0 5 _ _
_ 1 2 _ _ _
最后,我想对这些值求和。所以最终输出将是 21。
最有效的方法是什么?我已经看到对 matplotlib.path
和 Shapely 的引用,但我还没有找到任何适合我需要的东西,除非我只是遗漏了一些东西(这当然是可能的)。看起来这个功能应该内置到 NumPy 中,但我还没有遇到过它。
为什么我需要这个:我有一个代表全局人口的 ASCII 网格,并且我有政治边界。我想在人口网格上叠加政治边界以确定该位置的总人口数。
最佳答案
涉及的步骤-
创建一个与图像数组形状相同的 bool 数组。
使用给定的轮廓点填充轮廓。
通过填充轮廓点形成的孔来创建多边形 Blob 。
使用填充掩码对图像数组进行 bool 索引并获得总和。
实现-
from scipy.ndimage.morphology import binary_fill_holes as imfill
mask = np.zeros(img.shape,dtype=bool)
mask[idx[:,0], idx[:,1]] = 1
out = img[imfill(mask)].sum()
sample 运行-
1) 输入图像和多边形轮廓点:
In [107]: img
Out[107]:
array([[1, 6, 8, 4, 2, 3],
[5, 4, 1, 3, 7, 9],
[1, 0, 2, 3, 4, 8],
[6, 7, 0, 5, 7, 4],
[0, 1, 2, 5, 4, 2]])
In [108]: idx
Out[108]:
array([[1, 2],
[2, 3],
[3, 3],
[4, 2],
[4, 1],
[3, 1],
[2, 1],
[1, 2]])
2) 提议的代码:
In [109]: mask = np.zeros(img.shape,dtype=bool)
...: mask[idx[:,0], idx[:,1]] = 1
...: out = img[imfill(mask)].sum()
...:
3) 分析结果:
In [134]: imfill(mask) # Polygon mask
Out[134]:
array([[False, False, False, False, False, False],
[False, False, True, False, False, False],
[False, True, True, True, False, False],
[False, True, True, True, False, False],
[False, True, True, False, False, False]], dtype=bool)
In [135]: img[imfill(mask)]
Out[135]: array([1, 0, 2, 3, 7, 0, 5, 1, 2])
In [136]: img[imfill(mask)].sum()
Out[136]: 21
关于python - 如何从位于数组顶部的多边形内的 NumPy 二维数组中提取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42821711/
这个问题在这里已经有了答案: final keyword in method parameters [duplicate] (9 个回答) 关闭 8 年前。 在此示例中,声明 Object fina
我的目标:是通过我的函数更新字段获取选定值并使用函数输出值运行它。 问题:当我从列表中选择值时,它不会触发函数,也不会更新字段。 感谢您的帮助。 HTML 12 14 16 18 20 22 24
我有一本具有这种形式的字典: myDict = {'foo': bar, 'foobar baz': qux} 现在,我想拆分字典键中的空格,使其成为下一个键并获取值(重复)。 myDictRev1
vector a; vector b; int temp_holder; cout > temp_holder) a.push_back(temp_holder); cout > temp_h
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我
我正在使用 jquery ui 日期选择器来获取 fromDate 和 toDate 以下是from日期的代码 $("#from_date").datepicker({
我是一名优秀的程序员,十分优秀!