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中pass语句用法实例分析
Apr 30 Python
python中的全局变量用法分析
Jun 09 Python
在Django的上下文中设置变量的方法
Jul 20 Python
Python编程argparse入门浅析
Feb 07 Python
对python中的pop函数和append函数详解
May 04 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
Oct 14 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
解决Pycharm 导入其他文件夹源码的2种方法
Feb 12 Python
linux 下selenium chrome使用详解
Apr 02 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 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
php循环table实现一行两列显示的方法
2015/06/04 PHP
PHP文件操作方法汇总
2015/07/01 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
javascript设置页面背景色及背景图片的方法
2015/12/29 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
python分割文件的常用方法
2014/11/01 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
python批量爬取下载抖音视频
2019/06/17 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
技校毕业生自荐书
2014/05/23 职场文书
社区务虚会发言材料
2014/10/20 职场文书
维稳工作情况汇报
2014/10/27 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
2015年护理工作总结范文
2015/04/03 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS
DQL数据查询语句使用示例
2022/12/24 MySQL