python实现IOU计算案例


Posted in Python onApril 12, 2020

计算两个矩形的交并比,通常在检测任务里面可以作为一个检测指标。你的预测bbox和groundtruth之间的差异,就可以通过IOU来体现。很简单的算法实现,我也随便写了一个,嗯,很简单。

1. 使用时,请注意bbox四个数字的顺序(y0,x0,y1,x1),顺序不太一样。

#!/usr/bin/env python
# encoding: utf-8
 
def compute_iou(rec1, rec2):
  """
  computing IoU
  :param rec1: (y0, x0, y1, x1), which reflects
      (top, left, bottom, right)
  :param rec2: (y0, x0, y1, x1)
  :return: scala value of IoU
  """
  # computing area of each rectangles
  S_rec1 = (rec1[2] - rec1[0]) * (rec1[3] - rec1[1])
  S_rec2 = (rec2[2] - rec2[0]) * (rec2[3] - rec2[1])
 
  # computing the sum_area
  sum_area = S_rec1 + S_rec2
 
  # find the each edge of intersect rectangle
  left_line = max(rec1[1], rec2[1])
  right_line = min(rec1[3], rec2[3])
  top_line = max(rec1[0], rec2[0])
  bottom_line = min(rec1[2], rec2[2])
 
  # judge if there is an intersect
  if left_line >= right_line or top_line >= bottom_line:
    return 0
  else:
    intersect = (right_line - left_line) * (bottom_line - top_line)
    return (intersect / (sum_area - intersect))*1.0
 
 
if __name__=='__main__':
  rect1 = (661, 27, 679, 47)
  # (top, left, bottom, right)
  rect2 = (662, 27, 682, 47)
  iou = compute_iou(rect1, rect2)
  print(iou)

补充知识:基于Python实现的IOU算法---最简单易懂的代码实现

概念介绍:

交并比:(Intersection over Union)

python实现IOU计算案例

如上图所示,IOU值定位为两个矩形框面积的交集和并集的比值。即:

python实现IOU计算案例

交并比的实现也是非常简单的,执行过程如下:

python实现IOU计算案例

1. 交集形状的宽度计算为:

IOU_W = min(x1,x2,x3,x4)+w1+w2-max(x1,x2,x3,x4)

2. 交集形状的高度计算为:

IOU_H = min(y1,y2,y3,y4)+h1+h2-max(y1,y2,y3,y4)

其实是很简单的几何关系变换,上面的图可以帮助你很好的理解这个意思。

代码实现:001-IOU计算

以上这篇python实现IOU计算案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用Decorator来简化元编程的教程
Apr 13 Python
Python Django使用forms来实现评论功能
Aug 17 Python
python 文件操作删除某行的实例
Sep 04 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
Python中print函数简单使用总结
Aug 05 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
python操作yaml说明
Apr 08 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
Jul 13 Python
python中二分查找法的实现方法
Dec 06 Python
python 已知平行四边形三个点,求第四个点的案例
Apr 12 #Python
python 已知三条边求三角形的角度案例
Apr 12 #Python
python实现输入三角形边长自动作图求面积案例
Apr 12 #Python
Python3如何判断三角形的类型
Apr 12 #Python
Python判断三段线能否构成三角形的代码
Apr 12 #Python
Python 实现打印单词的菱形字符图案
Apr 12 #Python
python 使用while循环输出*组成的菱形实例
Apr 12 #Python
You might like
优化PHP代码的53条建议
2008/03/27 PHP
yii中widget的用法
2014/12/03 PHP
php实现上传图片文件代码
2015/07/19 PHP
10个php函数实用却不常见
2015/10/13 PHP
Yii2如何批量添加数据
2016/05/17 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
简述php环境搭建与配置
2016/12/05 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
Element Breadcrumb 面包屑的使用方法
2020/07/26 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
分享6个隐藏的python功能
2017/12/07 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
个人生活学习自我评价范文
2013/11/26 职场文书
建筑施工员岗位职责
2013/11/26 职场文书
运动会稿件300字
2014/02/14 职场文书
鼓舞士气的口号
2014/06/16 职场文书
营销与策划专业求职信
2014/06/20 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
婚礼领导致辞大全
2015/07/28 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书