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定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
Python解析最简单的验证码
Jan 07 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
Python 3实战爬虫之爬取京东图书的图片详解
Oct 09 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
Appium+Python自动化测试之运行App程序示例
Jan 23 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
django修改models重建数据库的操作
Mar 31 Python
python 基于卡方值分箱算法的实现示例
Jul 17 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 Python
python 实现表情识别
Nov 21 Python
Django搭建项目实战与避坑细节详解
Dec 06 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生成随机密码的几种方法
2011/01/17 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
2017/04/25 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
JS使用数组实现的队列功能示例
2019/03/04 Javascript
一篇超完整的Vue新手入门指导教程
2020/11/18 Vue.js
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
python opencv实现图像边缘检测
2019/04/29 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
努比亚手机官网:nubia
2016/10/06 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
GWT都有什么特性
2016/12/02 面试题
2015年春训学习心得体会范文
2015/03/09 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL