如何通过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分析git log日志示例
Feb 27 Python
Python实现合并字典的方法
Jul 07 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
django之session与分页(实例讲解)
Nov 13 Python
简单了解python模块概念
Jan 11 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
python入门学习关于for else的特殊特性讲解
Nov 20 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+javascript液晶时钟
2006/10/09 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
详解Angular 4.x Injector
2017/05/04 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
Python变量和字符串详解
2017/04/29 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
关于keras.layers.Conv1D的kernel_size参数使用介绍
2020/05/22 Python
python 实现的车牌识别项目
2021/01/25 Python
西尔斯百货官网:Sears
2016/09/06 全球购物
建筑工程专业大学生求职信
2014/04/23 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
hive数据仓库新增字段方法
2022/06/25 数据库