如何通过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中的MySQLdb模块添加超时功能的教程
May 05 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
浅谈Python生成器generator之next和send的运行流程(详解)
May 08 Python
django项目运行因中文而乱码报错的几种情况解决
Nov 07 Python
Python文件操作基本流程代码实例
Dec 11 Python
Python Xml文件添加字节属性的方法
Mar 31 Python
Python聊天室程序(基础版)
Apr 01 Python
python return逻辑判断表达式实现解析
Dec 02 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
Python高并发解决方案实现过程详解
Jul 31 Python
python基于exchange函数发送邮件过程详解
Nov 06 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
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
Javascript 调试利器 Firebug使用详解六
2009/07/05 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
基于jquery的手风琴图片展示效果实现方法
2014/12/16 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
2020/05/16 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
HTML5有哪些新特征
2015/12/01 HTML / CSS
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
党员自我评价分享
2013/12/13 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
《春到梅花山》教学反思
2014/04/16 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
个性与发展自我评价
2015/03/06 职场文书
研讨会致辞
2015/07/31 职场文书
基于Python实现一个春节倒计时脚本
2022/01/22 Python