如何通过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 anaconda 安装 环境变量 升级 以及特殊库安装的方法
Jun 21 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
python爬虫 urllib模块反爬虫机制UA详解
Aug 20 Python
pygame实现俄罗斯方块游戏(基础篇1)
Oct 29 Python
Python二次规划和线性规划使用实例
Dec 09 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
python输出数学符号实例
May 11 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
Python获取百度热搜的完整代码
Apr 07 Python
Python基础之数据结构详解
Apr 28 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
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
简单谈谈CommonsChunkPlugin抽取公共模块
2017/12/31 Javascript
jQuery.parseJSON()函数详解
2019/02/28 jQuery
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
python 实现堆排序算法代码
2012/06/05 Python
python实现数通设备端口监控示例
2014/04/02 Python
Python找出list中最常出现元素的方法
2016/06/14 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python UDP(udp)协议发送和接收的实例
2019/07/22 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
感恩老师演讲稿400字
2014/08/28 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
元旦主持词开场白
2015/05/29 职场文书