多边形区域填充算法_求取任意两个多边形的IOU

在目标检测中,真值与预测值的交并比IoU(Intersection over Union)是用来评价检测模型的一个重要指标。通俗意义上来讲,也就是检测结果与真实的结果重叠的区间所占两者面积之和的权重,一般说来,当IoU>0.5,我们认为检测准确。IoU具体的定义如下所示:

0cc78c9290307b81225f11de7a359949.png
图片来源网络

609ebf4cd004dee6bd59d4db34e2b890.png

对于常见的矩形框类型的求取交并比,我们见得较多,算法也容易掌握。而最近需要求解一个任意多边形的IoU用来判断检测效果,在手撸了代码不断尝试以后,发现了借助opencv可以简单快速的实现。详情见代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt
height=600
width=600
color = (1,0,0)
color2 = (0,1,0)

img = np.zeros([600,600,2])
triangle1 = np.array([[20,20], [20, 100], [300, 100],[300,20]])
cv2.fillConvexPoly(img, triangle1, color)
area1 = img.sum()
img = np.zeros([600,600,3])
triangle2 = np.array([[20,60], [20, 120], [300, 120],[300,60]])
cv2.fillConvexPoly(img, triangle2, color2)
area2 = img.sum()
cv2.fillConvexPoly(img, triangle1, color)
union_area = img.sum()
inter_area = area1 + area2 - union_area
IOU = inter_area / union_area
plt.imshow(img)
plt.show()
print (IOU)

借助opencv的fillConvexPoly函数,实现对多变形的填充,而填充的对象为固定的color,利用triangle接受多边形各个顶点的坐标信息,最后得到两个多边形的IoU。上述代码在计算IoU时存在一定的误差,这主要是利用fillConvexPoly函数时导致,如果满足你的IoU精度要求,不妨采用这种思路,主要我也没想到怎么求任意多边形的IoU,就将就着了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值