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实现HTTP协议下的文件下载方法总结
Apr 20 Python
tornado 多进程模式解析
Jan 15 Python
python实现京东秒杀功能
Jul 30 Python
Python 2/3下处理cjk编码的zip文件的方法
Apr 26 Python
python实时检测键盘输入函数的示例
Jul 17 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
selenium+Chrome滑动验证码破解二(某某网站)
Dec 17 Python
pandas中的数据去重处理的实现方法
Feb 10 Python
Python os模块常用方法和属性总结
Feb 20 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
一文读懂python Scrapy爬虫框架
Feb 24 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 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中养成7个面向对象的好习惯
2010/07/17 PHP
用PHP实现 上一篇、下一篇的代码
2012/09/29 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
2020/04/20 PHP
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
js+html5获取用户地理位置信息并在Google地图上显示的方法
2015/06/05 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
Web开发使用Angular实现用户密码强度判别的方法
2017/09/27 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
Python实现抢购IPhone手机
2018/02/07 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
python解析多层json操作示例
2019/12/30 Python
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
redis实现排行榜功能
2021/05/24 Redis