如何通过python实现IOU计算代码实例


Posted in Python onNovember 02, 2020

Intersection over Union(IOU)是一种测量在特定数据集中检测相应物体准确度的一个标准。IoU是一个简单的测量标准,只要是在输出中得出一个预测范围(bounding boxes)的任务都可以用IoU来进行测量。

IoU分数是对象类别分割问题的标准性能度量 [1] 。 给定一组图像,IoU测量给出了在该组图像中存在的对象的预测区域和地面实况区域之间的相似性

计算两个矩形的交并比,通常在检测任务里面可以作为一个检测指标。你的预测bbox和groundtruth之间的差异,就可以通过IOU来体现。

代码如下

#!/usr/bin/env python
# encoding: utf-8
 
import numpy as np
 
'''
函数说明:计算两个框的重叠面积
输入:
rec1 第一个框xmin ymin xmax ymax
rec2 第二个框xmin ymin xmax ymax
输出:
iouv 重叠比例 0 没有
'''
def compute_iou(rec1, rec2):
   
  # computing area of each rectangles
  S_rec1 = (rec1[2] - rec1[0]) * (rec1[3] - rec1[1]) # H1*W1
  S_rec2 = (rec2[2] - rec2[0]) * (rec2[3] - rec2[1]) # H2*W2
  
  # computing the sum_area
  sum_area = S_rec1 + S_rec2 #总面积
  
  # find the each edge of intersect rectangle
  left_line = max(rec1[0], rec2[0])
  right_line = min(rec1[2], rec2[2])
  top_line = max(rec1[1], rec2[1])
  bottom_line = min(rec1[3], rec2[3])
  
  # judge if there is an intersect
  if left_line >= right_line or top_line >= bottom_line:
    #print("没有重合区域")
    return 0
  else:
  #print("有重合区域")
    intersect = (right_line - left_line) * (bottom_line - top_line)
    iouv=(float(intersect) / float(sum_area - intersect))*1.0
 
    return iouv
 
'''
函数说明:获取两组匹配结果
输入:
rectA 车位
rectB 车辆
threod 重叠面积最小数值界限 默认0.6
输出:
CarUse 一维数组保存是否占用 1 占用 0 没有
 
'''
def TestCarUse(rectA,rectB,threod=0.6,debug=0):
  #threod=0.8#设定最小值
  ALength=len(rectA)
  BLength=len(rectB)
 
  #创建保存匹配结果的矩阵
  recIOU=np.zeros((ALength,BLength),dtype=float,order='C')
  #用于记录车位能够使否占用  
  CarUse=np.zeros((1,ALength),dtype=int,order='C')
 
  for i in range(0,ALength):
    for j in range(0,BLength):
      iou = compute_iou(rectA[i], rectB[j])
      recIOU[i][j]=format(iou,'.3f')
      if iou>=threod:    
        CarUse[0,i]=1 #有一个超过匹配认为车位i被占用
  if debug==1:
    print('----匹配矩阵----')
    print(recIOU)
    '''
    print('----车位占用情况----')
    for i in range(0,ALength):
    msg='车位'+str(i)+"-"+str(CarUse[0][i])
    print(msg)
    '''
  return CarUse
 
 
  
if __name__=='__main__':
  #A代表车位
  rectA1 = (30, 10, 70, 20)
  rectA2 = (70, 10, 80, 20)
  rectA =[rectA1,rectA2]
  #B代表检测车辆
  rectB1 = (20, 10, 35, 20)
  rectB2 = (30, 15, 70, 25)
  rectB3 = (70, 10, 80, 20)
  rectB =[rectB1,rectB2,rectB3]
   
  #获取车位占用情况 rectA车位 rectB车辆 0.6占面积最小比
  CarUse=TestCarUse(rectA,rectB,0.6,1)
 
  print('----车位占用情况----')
  for i in range(0,len(CarUse)+1):
  msg='车位'+str(i)+"-"+str(CarUse[0][i])
    print(msg)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python中最难理解的点-装饰器
Apr 03 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
python版飞机大战代码分享
Nov 20 Python
详解Python_shutil模块
Mar 15 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
Oct 24 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
基于python 取余问题(%)详解
Jun 03 Python
opencv 分类白天与夜景视频的方法
Jun 05 Python
Python编程源码报错解决方法总结经验分享
Oct 05 Python
Python四款GUI图形界面库介绍
Jun 05 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 #Python
Jupyter安装链接aconda实现过程图解
Nov 02 #Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 #Python
python定时截屏实现
Nov 02 #Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 #Python
如何基于matlab相机标定导出xml文件
Nov 02 #Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 #Python
You might like
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
2016/07/28 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
走进AngularJs之过滤器(filter)详解
2017/02/17 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
jQuery实现的鼠标响应缓冲动画效果示例
2018/02/13 jQuery
node内置调试方法总结
2018/02/22 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
JavaScript如何使用插值实现图像渐变
2020/06/28 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
python统计cpu利用率的方法
2015/06/02 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
Python中字符串与编码示例代码
2019/05/20 Python
python函数与方法的区别总结
2019/06/23 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
财务与信息服务专业推荐信
2013/11/28 职场文书
商务英语求职自荐信范文
2013/12/24 职场文书
见习期自我鉴定
2014/01/31 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
古诗之感恩老师
2019/10/24 职场文书