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实现获取客户机上指定文件并传输到服务器的方法
Mar 16 Python
python 循环while和for in简单实例
Aug 16 Python
Python 实现一行输入多个值的方法
Apr 21 Python
基于python绘制科赫雪花
Jun 22 Python
python 统计列表中不同元素的数量方法
Jun 29 Python
3个用于数据科学的顶级Python库
Sep 29 Python
pytorch 调整某一维度数据顺序的方法
Dec 08 Python
浅谈Python批处理文件夹中的txt文件
Mar 11 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
Python Django form 组件动态从数据库取choices数据实例
May 19 Python
Python项目跨域问题解决方案
Jun 22 Python
Python如何使用vars返回对象的属性列表
Oct 17 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 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
Javascript仿新浪游戏频道鼠标悬停显示子菜单效果
2015/08/21 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
JS中的const命令你真懂它吗
2020/03/08 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
python实现的udp协议Server和Client代码实例
2014/06/04 Python
python中global与nonlocal比较
2014/11/21 Python
在Python中使用Mako模版库的简单教程
2015/04/08 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
Django框架中间件定义与使用方法案例分析
2019/11/28 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
2014年党员创先争优承诺书
2014/05/29 职场文书
2014年设计师工作总结
2014/11/25 职场文书
安全保证书
2015/01/16 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL