如何通过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 ElementTree 基本读操作示例
Apr 09 Python
python读取浮点数和读取文本文件示例
May 06 Python
跟老齐学Python之做一个小游戏
Sep 28 Python
简单介绍Python中的readline()方法的使用
May 24 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
详解K-means算法在Python中的实现
Dec 05 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
Python常见数据类型转换操作示例
May 08 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 Python
Python 一键获取百度网盘提取码的方法
Aug 01 Python
Django 导出项目依赖库到 requirements.txt过程解析
Aug 23 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
javascript之卸载鼠标事件的代码
2007/05/14 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
jQuery操作动态生成的内容的方法
2016/05/28 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
移动端图片上传旋转、压缩问题的方法
2018/10/16 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
jQuery列表动态增加和删除的实现方法
2020/11/05 jQuery
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
python创建线程示例
2014/05/06 Python
用Python编写简单的微博爬虫
2016/03/04 Python
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
python字符串,元组,列表,字典互转代码实例详解
2020/02/14 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
2020/04/15 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
利用python爬取有道词典的方法
2020/12/08 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
应届生求职信
2014/05/31 职场文书
求职自我评价范文
2015/03/09 职场文书
任命通知范文
2015/04/21 职场文书
讲座新闻稿
2015/07/18 职场文书
公司员工管理制度
2015/08/04 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书