假设2d空间中的一系列点不是自相交的,那么确定结果多边形面积的有效方法是什么?
作为旁注,这不是作业,我不是在寻找代码.我正在寻找一个可以用来实现我自己的方法的描述.我有关于从点列表中拉出一系列三角形的想法,但我知道有一些关于凸多边形和凹多边形的边缘情况我可能无法捕捉到.
标题基本上都说明了一切.我需要使用Python计算地球表面多边形内的区域.计算由地球表面任意多边形包围的区域说明了一些内容,但对技术细节仍然模糊:
如果你想用更"GIS"的味道来做这件事,那么你需要为你的区域选择一个度量单位,找到一个保留区域的适当投影(不是所有的).既然你在谈论计算任意多边形,我会使用类似Lambert Azimuthal等面积投影的东西.将投影的原点/中心设置为多边形的中心,将多边形投影到新坐标系,然后使用标准平面技术计算面积.
那么,我如何在Python中执行此操作?
我在一个显示2D图像的示例ASCII文件中有一组点.
我想估计这些点填充的总面积.在这个平面内有一些地方没有被任何点填满,因为这些区域已经被掩盖了.我认为估计该区域可能是实用的将是应用凹形船体 或alpha形状.我尝试了这种方法来找到合适的
alpha
值,并因此估计面积.
from shapely.ops import cascaded_union, polygonize
import shapely.geometry as geometry
from scipy.spatial import Delaunay
import numpy as np
import pylab as pl
from descartes import PolygonPatch
from matplotlib.collections import LineCollection
def plot_polygon(polygon):
fig = pl.figure(figsize=(10,10))
ax = fig.add_subplot(111)
margin = .3
x_min, y_min, x_max, y_max = polygon.bounds
ax.set_xlim([x_min-margin, x_max+margin])
ax.set_ylim([y_min-margin, y_max+margin])
patch = PolygonPatch(polygon, fc='#999999',
ec='#000000', fill=True,
zorder=-1)
ax.add_patch(patch)
return fig
def alpha_shape(points, alpha):
if len(points) < 4:
# …
Run Code Online (Sandbox Code Playgroud) 我想训练一个模型来检测图像中的车辆和道路。为此,我将使用 Mask R-CNN 和 YOLACT++。我使用 vgg 图像注释器为 Mask R-CNN 标记了一些图像,分割点如下图所示。
如您所见,没有 area 参数或 bbox 参数。我可以使用 minx miny maxx maxy 找到我的实例的 bbox,但我找不到如何找到该分割区域的区域。您可以在下图中看到 Yolac 注释结构。
标记所有实例需要大量时间。我花了至少 10 分钟来标记图像中的所有汽车,而且我已经有 500 个标记的图像。您对我有什么建议或想法可以帮助我节省时间,同时将第一个注释格式转换为第二个注释格式(掩码 r-cnn 到 coco(yolact))?
python machine-learning image-processing computer-vision deep-learning
我做了一个用鞋带方式计算面积多边形的函数。
这非常有效,但现在我想知道是否没有更快的方法来获得相同的结果。我想知道这一点,因为这个函数对于具有大量坐标的多边形必须运行得更快。
我的职能:
def shoelace_formula(polygonBoundary, absoluteValue = True):
nbCoordinates = len(polygonBoundary)
nbSegment = nbCoordinates - 1
l = [(polygonBoundary[i+1][0] - polygonBoundary[i][0]) * (polygonBoundary[i+1][1] + polygonBoundary[i][1]) for i in xrange(nbSegment)]
if absoluteValue:
return abs(sum(l) / 2.)
else:
return sum(l) / 2.
Run Code Online (Sandbox Code Playgroud)
我的多边形:
polygonBoundary = ((5, 0), (6, 4), (4, 5), (1, 5), (1, 0))
Run Code Online (Sandbox Code Playgroud)
结果 :
22.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我尝试使用 Numpy :它速度最快,但您必须先转换坐标。
import numpy as np
x, y = zip(*polygonBoundary)
def shoelace_formula_3(x, y, absoluteValue = True):
result = 0.5 * np.array(np.dot(x, np.roll(y, …
Run Code Online (Sandbox Code Playgroud) 我有一个 2D 点的列表/数组,它们形成一个非凸 非自相交形状。我想计算由该多边形包围的面积。
首先,我需要用我作为“曲线行走”(非自相交)提供的点形成一个多边形。如果我可以对那个多边形进行三角剖分,我就可以计算面积(我可以容忍一个小的相对误差)。
scipy.spatial.ConvexHull()
显然,在错误的形状和区域中使用 scipy 的结果,但我还没有在大型数学包中找到可以执行此操作的可用算法。
谁能告诉我怎么做?
python ×6
geometry ×3
polygon ×2
shapely ×2
2d ×1
algorithm ×1
area ×1
concave-hull ×1
geolocation ×1
geospatial ×1
performance ×1
scipy ×1