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实现的防DDoS脚本
Feb 08 Python
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
Python中对元组和列表按条件进行排序的方法示例
Nov 10 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
Python实现读取并保存文件的类
May 11 Python
Python 的类、继承和多态详解
Jul 16 Python
python逆序打印各位数字的方法
Jun 25 Python
Python3中列表list合并的四种方法
Apr 19 Python
numpy数组之存取文件的实现示例
May 24 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
Python3 读取Word文件方式
Feb 13 Python
 Python 中 logging 模块使用详情
Mar 03 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常用日期时间函数实例小结
2019/07/04 PHP
js树形控件脚本代码
2008/07/24 Javascript
javascript 动态参数判空操作
2008/12/22 Javascript
js no-repeat写法 背景不重复
2009/03/18 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
利用express启动一个server服务的方法
2017/09/17 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
React中的refs的使用教程
2018/02/13 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
解读Python中degrees()方法的使用
2015/05/18 Python
Python的爬虫程序编写框架Scrapy入门学习教程
2016/07/02 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
python中logging库的使用总结
2017/10/18 Python
Django model序列化为json的方法示例
2018/10/16 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
工作失职检讨书范文
2015/05/05 职场文书