如何通过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连接mysql并提交mysql事务示例
Mar 05 Python
python读取csv文件示例(python操作csv)
Mar 11 Python
Python解析网页源代码中的115网盘链接实例
Sep 30 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
关于Python数据结构中字典的心得
Dec 04 Python
Form表单及django的form表单的补充
Jul 25 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
python自动识别文本编码格式代码
Dec 26 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
python代码实现备忘录案例讲解
Jul 26 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
解析php中array_merge与array+array的区别
2013/06/21 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
js判断浏览器类型的方法
2013/08/07 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
详解python做UI界面的方法
2019/02/27 Python
Python生成随机验证码代码实例解析
2020/06/09 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
12岁生日感言
2014/01/21 职场文书
宿舍标语大全
2014/06/19 职场文书
计划生育标语
2014/06/23 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
2014年人大工作总结
2014/12/10 职场文书
大学校园招聘会感想
2015/08/10 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书