其算法流程大致如下:
给定两个倾斜的矩形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为
使用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