如何通过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中http请求方法库汇总
Jan 06 Python
Python脚本获取操作系统版本信息
Dec 17 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
利用Python如何生成hash值示例详解
Dec 20 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
详解tensorflow载入数据的三种方式
Apr 24 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
Python中断多重循环的思路总结
Oct 04 Python
python logging通过json文件配置的步骤
Apr 27 Python
利用Python如何实时检测自身内存占用
May 09 Python
Python 图片处理库exifread详解
Feb 25 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 zend 相对路径问题
2009/01/12 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
Jquery幻灯片特效代码分享--打开页面随机选择切换方式(3)
2015/08/15 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
python 反向输出字符串的方法
2018/07/16 Python
对python的输出和输出格式详解
2018/12/08 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
使用python批量转换文件编码为UTF-8的实现
2020/04/03 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
2015年房地产销售工作总结
2015/04/20 职场文书
升学宴家长致辞
2015/07/27 职场文书
远程教育培训心得体会
2016/01/09 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android