You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

单位圆内两个内接多边形的交并比(IoU)计算方法咨询

计算单位圆内接多边形的交并比(IoU)

嘿,要搞定这个问题其实很明确,核心就是围绕IoU的定义来:用两个多边形的交集面积除以它们的并集面积。因为你的多边形都是单位圆的内接多边形,所有顶点都在圆上,所以不用额外处理圆外的区域——它们的范围本来就都在圆内,直接计算多边形间的面积关系就行。

一、先明确IoU的计算公式

IoU的公式其实很简单,记住这个就够了:

IoU = 交集面积 / (多边形1面积 + 多边形2面积 - 交集面积)
这里的分母是并集面积,用两个多边形的面积和减去重复的交集部分,就能得到不重复的总面积。

二、用几何库快速实现(推荐)

手动计算多边形面积和交集容易出错,尤其是遇到凹多边形的时候,直接用Python的shapely库(专门处理几何图形运算)就能轻松搞定。下面是针对你给出的例子的完整代码:

import numpy as np
from shapely.geometry import Polygon

# 你提供的两个多边形坐标
poly1_coords = [(-0.708, 0.707), (0.309, -0.951), (0.587, -0.809)]
poly2_coords = [(1, 0), (0, 1), (-1, 0), (0, -1), (0.708, -0.708)]

# 把坐标转换成shapely的多边形对象
poly1 = Polygon(poly1_coords)
poly2 = Polygon(poly2_coords)

# 计算两个多边形各自的面积
area_poly1 = poly1.area
area_poly2 = poly2.area

# 计算两个多边形的交集区域,并获取其面积
intersection_region = poly1.intersection(poly2)
area_intersection = intersection_region.area

# 代入公式计算IoU
iou = area_intersection / (area_poly1 + area_poly2 - area_intersection)

# 输出结果,保留三位小数就是你要的0.124
print(f"计算得到的IoU:{round(iou, 3)}")

运行这段代码后,输出正好是0.124,和你的预期结果一致。

三、手动计算的思路(如果不想用库)

要是你想手动实现,步骤会繁琐一些,分这几步:

  • 用鞋带公式计算单个多边形的面积:把多边形的顶点坐标按顺序代入公式,就能算出面积。
  • 找出两个多边形的所有交点:遍历两个多边形的每条边,检测线段是否相交,记录所有交点和落在对方多边形内的顶点。
  • 构造交集多边形:把这些交点和顶点按顺序排列,形成交集的多边形轮廓,再用鞋带公式算面积。
  • 代入IoU公式算出结果

不过手动处理线段相交、凹多边形的顶点排序很容易出错,所以还是更推荐用成熟的几何库来节省时间。

内容的提问来源于stack exchange,提问作者NovelPomodoro

火山引擎 最新活动