python不使用for计算两组、多个矩形两两间的iou方式


Posted in Python onJanuary 18, 2020

解决问题: 不使用for计算两组、多个矩形两两间的iou

使用numpy广播的方法,在python程序中并不建议使用for语句,python中的for语句耗时较多,如果使用numpy广播的思想将会提速不少。

代码:

def calc_iou(bbox1, bbox2):
 if not isinstance(bbox1, np.ndarray):
  bbox1 = np.array(bbox1)
 if not isinstance(bbox2, np.ndarray):
  bbox2 = np.array(bbox2)
 xmin1, ymin1, xmax1, ymax1, = np.split(bbox1, 4, axis=-1)
 xmin2, ymin2, xmax2, ymax2, = np.split(bbox2, 4, axis=-1)
 
 area1 = (xmax1 - xmin1) * (ymax1 - ymin1)
 area2 = (xmax2 - xmin2) * (ymax2 - ymin2)
 
 ymin = np.maximum(ymin1, np.squeeze(ymin2, axis=-1))
 xmin = np.maximum(xmin1, np.squeeze(xmin2, axis=-1))
 ymax = np.minimum(ymax1, np.squeeze(ymax2, axis=-1))
 xmax = np.minimum(xmax1, np.squeeze(xmax2, axis=-1))
 
 h = np.maximum(ymax - ymin, 0)
 w = np.maximum(xmax - xmin, 0)
 intersect = h * w
 
 union = area1 + np.squeeze(area2, axis=-1) - intersect
 return intersect / union

程序中输入为多个矩形[xmin, ymin, xmax,ymax]格式的数组或者list,输出为numpy格式,例:输入的shape为(3, 4)、(5,4)则输出为(3, 5)各个位置为boxes间相互的iou值。后面会卡一个iou的阈值,然后就可以将满足条件的索引取出。如:

def delete_bbox(bbox1, bbox2, roi_bbox1, roi_bbox2, class1, class2, idx1, idx2, iou_value):
 idx = np.where(iou_value > 0.4)
 left_idx = idx[0]
 right_idx = idx[1]
 left = roi_bbox1[left_idx]
 right = roi_bbox2[right_idx]
 xmin1, ymin1, xmax1, ymax1, = np.split(left, 4, axis=-1)
 xmin2, ymin2, xmax2, ymax2, = np.split(right, 4, axis=-1)
 left_area = (xmax1 - xmin1) * (ymax1 - ymin1)
 right_area = (xmax2 - xmin2) * (ymax2 - ymin2)
 left_idx = left_idx[np.squeeze(left_area < right_area, axis=-1)]#小的被删
 right_idx = right_idx[np.squeeze(left_area > right_area, axis=-1)]
 
 bbox1 = np.delete(bbox1, idx1[left_idx], 0)
 class1 = np.delete(class1, idx1[left_idx])
 bbox2 = np.delete(bbox2, idx2[right_idx], 0)
 class2 = np.delete(class2, idx2[right_idx])
 
 return bbox1, bbox2, class1, class2

IOU计算原理:

python不使用for计算两组、多个矩形两两间的iou方式

ymin = np.maximum(ymin1, np.squeeze(ymin2, axis=-1))

xmin = np.maximum(xmin1, np.squeeze(xmin2, axis=-1))

ymax = np.minimum(ymax1, np.squeeze(ymax2, axis=-1))

xmax = np.minimum(xmax1, np.squeeze(xmax2, axis=-1))

h = np.maximum(ymax - ymin, 0)

w = np.maximum(xmax - xmin, 0)

intersect = h * w

计算矩形间min的最大值,max的最小值,如果ymax-ymin值大于0则如左图所示,如果小于0则如右图所示

以上这篇python不使用for计算两组、多个矩形两两间的iou方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
python访问抓取网页常用命令总结
Apr 11 Python
使用Python3制作TCP端口扫描器
Apr 17 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
Feb 10 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
Python 日期与时间转换的方法
Aug 01 Python
Python开发.exe小工具的详细步骤
Jan 27 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 #Python
利用setuptools打包python程序的方法步骤
Jan 18 #Python
python计算二维矩形IOU实例
Jan 18 #Python
解决python replace函数替换无效问题
Jan 18 #Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 #Python
pytorch 状态字典:state_dict使用详解
Jan 17 #Python
Python标准库itertools的使用方法
Jan 17 #Python
You might like
咖啡与水的关系
2021/03/03 冲泡冲煮
用PHP开发GUI
2006/10/09 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
奇妙的js
2007/09/24 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
JavaScript Drum Kit 指南(纯 JS 模拟敲鼓效果)
2017/07/23 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
单链表反转python实现代码示例
2018/02/08 Python
python实现随机漫步算法
2018/08/27 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
Docker部署Python爬虫项目的方法步骤
2020/01/19 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
自我鉴定思想方面
2013/10/07 职场文书
酒店前台接待岗位职责
2013/12/03 职场文书
超市促销活动总结
2014/07/01 职场文书
社团活动总结格式
2014/08/29 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
保洁员岗位职责
2015/02/04 职场文书
史上最牛辞职信
2015/05/13 职场文书
学历证明范文
2015/06/16 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
python实现简单聊天功能
2021/07/07 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python