倾斜矩形框的IOU计算与Python实现

2022-09-02 13:30:43 浏览数 (3)

其算法流程大致如下:

给定两个倾斜的矩形R_{i}, R_{j}

1. 首先设置点集P S e t

2. 将两个矩形的交点均加入至P S e t 中;

3. 接着将矩形R_i 包含在R_j 中的顶点加入至P S e t 中;

4. 同样,将矩形R_j 包含在R_i 中的顶点加入至Pset中;

5. 将点集Pset 中的点进行三角化,可排成逆时针,计算面积Area(I)

6. 此时的IOU为

operatorname{IOU}(i, j)=frac{operatorname{Area}(I)}{text { Area }left(R_{i}right) operatorname{Area}left(R_{j}right)-operatorname{Area}(I)}

使用Python中的Shapely模块可轻松地进行Skew IOU Computation:

代码语言:javascript复制
from shapely.geometry import Polygon

def intersection(g, p):
    g=np.asarray(g)
    p=np.asarray(p)
    g = Polygon(g[:8].reshape((4, 2)))
    p = Polygon(p[:8].reshape((4, 2)))
    if not g.is_valid or not p.is_valid:
        return 0
    inter = Polygon(g).intersection(Polygon(p)).area
    union = g.area   p.area - inter
    if union == 0:
        return 0
    else:
        return inter/union

0 人点赞