如何通过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中使用pngquant压缩png图片的教程
Apr 09 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
BP神经网络原理及Python实现代码
Dec 18 Python
Django web框架使用url path name详解
Apr 29 Python
Python实现FM算法解析
Jun 18 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
Python如何实现动态数组
Nov 02 Python
numpy中三维数组中加入元素后的位置详解
Nov 28 Python
如何基于Python实现数字类型转换
Feb 07 Python
python实现PolynomialFeatures多项式的方法
Jan 06 Python
Python pyecharts绘制条形图详解
Apr 02 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显示MySQL数据的三种方法
2008/06/05 PHP
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
PHP SQLite类
2009/05/07 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
php单例模式的简单实现方法
2016/06/10 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
[02:08]我的刀塔不可能这么可爱 胡晓桃_1
2014/06/20 DOTA
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
详解python3实现的web端json通信协议
2016/12/29 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
绿色家庭事迹材料
2014/05/01 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL