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使用稀疏矩阵节省内存实例
Jun 27 Python
解决Python出现_warn_unsafe_extraction问题的方法
Mar 24 Python
PyQt5每天必学之工具提示功能
Apr 19 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
对django views中 request, response的常用操作详解
Jul 17 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
python如何从键盘获取输入实例
Jun 18 Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
Python如何使用神经网络进行简单文本分类
Feb 25 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安装攻略:常见问题解答(一)
2006/10/09 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
给网站上的广告“加速”显示的方法
2007/04/08 Javascript
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
vue中页面跳转拦截器的实现方法
2017/08/23 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
Vue性能优化的方法
2020/07/30 Javascript
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
python搭建微信公众平台
2016/02/09 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
对Python3 解析html的几种操作方式小结
2019/02/16 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
如何将json数据转换为python数据
2020/09/04 Python
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
研修心得体会
2014/09/04 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
初中作文评语
2014/12/25 职场文书
银行自荐信范文
2015/03/25 职场文书
幼儿园六一主持词
2015/06/30 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
以下牛机,你有几个
2022/04/05 无线电
Java Redisson多策略注解限流
2022/09/23 Java/Android