如何通过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常用列表数据结构小结
Aug 06 Python
零基础学Python(一)Python环境安装
Aug 20 Python
Python中暂存上传图片的方法
Feb 18 Python
Python读取stdin方法实例
May 24 Python
基于Python的Post请求数据爬取的方法详解
Jun 14 Python
Django后台admin的使用详解
Jul 08 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
python处理document文档保留原样式
Sep 23 Python
使用python实现对元素的长截图功能
Nov 14 Python
解决在keras中使用model.save()函数保存模型失败的问题
May 21 Python
Python多线程正确用法实例解析
May 30 Python
Python 中Operator模块的使用
Jan 30 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源代码
2009/08/21 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
详解JavaScript ES6中的模板字符串
2015/07/28 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
js 自带的 map() 方法全面了解
2016/08/16 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
JS中的JSON对象的定义和取值实现代码
2018/05/09 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
原生JS实现随机点名项目的实例代码
2019/04/30 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
python多线程同步实例教程
2019/08/11 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
Python autoescape标签用法解析
2020/01/17 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
2020/02/18 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
企业面试题试卷附带答案
2015/12/20 面试题
父亲的菜园教学反思
2014/02/13 职场文书
《乌塔》教学反思
2014/02/17 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
歼十出击观后感
2015/06/11 职场文书
古诗之爱国古诗5首
2019/09/20 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS