如何通过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处理文本文件实现生成指定格式文件的方法
Jul 31 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
python实现推箱子游戏
Mar 25 Python
Python解析、提取url关键字的实例详解
Dec 17 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
如何使用python把ppt转换成pdf
Jun 29 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
详解Python对JSON中的特殊类型进行Encoder
Jul 15 Python
Python3远程监控程序的实现方法
Jul 15 Python
Tensorflow 卷积的梯度反向传播过程
Feb 10 Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 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
关于页面优化和伪静态
2009/10/11 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
2016/06/28 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
怎么选择Javascript框架(Javascript Framework)
2013/11/22 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
vue.js的安装方法
2017/05/12 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
2018/06/28 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
九步学会Python装饰器
2015/05/09 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
2019/11/29 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
Python类绑定方法及非绑定方法实例解析
2020/10/09 Python
python修改微信和支付宝步数的示例代码
2020/10/12 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
营业经理岗位职责
2013/11/10 职场文书
机关门卫制度
2014/02/01 职场文书
幼儿园中班开学寄语
2014/04/03 职场文书
加入学生会自荐书
2015/03/05 职场文书
创业计划书之熟食店
2019/10/16 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL