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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
深入浅析python中的多进程、多线程、协程
Jun 22 Python
Python 模拟购物车的实例讲解
Sep 11 Python
python操作列表的函数使用代码详解
Dec 28 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 Python
Python文本处理简单易懂方法解析
Dec 19 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
python selenium xpath定位操作
Sep 01 Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 Python
pytorch 实现多个Dataloader同时训练
May 29 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调用三种数据库的方法(1)
2006/10/09 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
php并发加锁示例
2016/10/17 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
jQuery中extend函数的实现原理详解
2015/02/03 Javascript
10个很棒的jQuery代码片段
2015/09/24 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
vue中如何去掉空格的方法实现
2018/11/09 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
Pycharm设置界面全黑的方法
2018/05/23 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
python实现图片转字符画
2021/02/19 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
美国著名珠宝品牌之一:Jared The Galleria Of Jewelry
2016/10/01 全球购物
英国家用电器购物网站:Hughes
2018/02/23 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
会计电算化个人自我评价
2013/11/17 职场文书
工厂实习感言
2014/01/14 职场文书
2014年母亲节寄语
2014/05/07 职场文书
工作能力自我评价2015
2015/03/05 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
如何用H5实现好玩的2048小游戏
2022/07/23 HTML / CSS