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爬虫之抓取百度贴吧并存储到本地txt文件改进版
Nov 06 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
Python SQLite3简介
Feb 22 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
使用Python进行防病毒免杀解析
Dec 13 Python
Python SMTP配置参数并发送邮件
Jun 16 Python
深入分析python 排序
Aug 24 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
python+selenium小米商城红米K40手机自动抢购的示例代码
Mar 24 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 Python
Python 统计序列中元素的出现频度
Apr 26 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
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
php编程每天必学之表单验证
2016/03/01 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
js正则表达式的使用详解
2013/07/09 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
javascript实现数独解法
2015/03/14 Javascript
JS中如何实现点击a标签返回页面顶部的问题
2017/01/19 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
[01:24]2014DOTA2 TI第二日 YYF表示这届谁赢都有可能
2014/07/11 DOTA
使用Python的turtle模块画图的方法
2017/11/15 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
2014端午节活动策划方案
2014/01/27 职场文书
2014大学生全国两会学习心得体会
2014/03/13 职场文书
出国留学计划书
2014/04/27 职场文书
施工安全协议书范本
2014/09/26 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
推广普通话的宣传语
2015/07/13 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
AJAX学习笔记
2021/05/18 Javascript
redis 存储对象的方法对比分析
2021/08/02 Redis
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js