如何通过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的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 Python
python实现微信远程控制电脑
Feb 22 Python
python使用turtle库绘制时钟
Mar 25 Python
Python实现App自动签到领取积分功能
Sep 29 Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 Python
python Django的web开发实例(入门)
Jul 31 Python
详解Python并发编程之从性能角度来初探并发编程
Aug 23 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
Feb 24 Python
用Python 执行cmd命令
Dec 18 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提高脚本性能的4个技巧
2020/08/18 PHP
JavaScript中的this实例分析
2011/04/28 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
美国最大婚纱连锁店运营商:David’s Bridal
2019/03/12 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
自主招生自荐信格式
2013/12/03 职场文书
转党组织关系介绍信
2014/01/08 职场文书
男方父母证婚词
2014/01/12 职场文书
铁路工务反思材料
2014/02/07 职场文书
行政文秘岗位职责范本
2014/02/10 职场文书
硕士生工作推荐信
2014/03/07 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
含预算的公司户外活动方案
2014/08/16 职场文书
股东授权委托书范本
2014/09/13 职场文书
出国签证在职证明范本
2014/11/24 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python