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中用函数作为返回值和实现闭包的教程
Apr 27 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
使用Python写一个贪吃蛇游戏实例代码
Aug 21 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
深入浅析Python 中 is 语法带来的误解
May 07 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
python词云库wordCloud使用方法详解(解决中文乱码)
Feb 17 Python
Python的in,is和id函数代码实例
Apr 18 Python
Python新手学习函数默认参数设置
Jun 03 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
你需要掌握的20个Python常用技巧
Feb 28 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
php调用c接口无错版介绍
2014/03/11 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
php自动载入类用法实例分析
2016/06/24 PHP
动态加载js的几种方法
2006/10/23 Javascript
javascript时区函数介绍
2012/09/14 Javascript
Firefox和IE兼容性问题及解决方法总结
2013/10/08 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
Vue中的v-cloak使用解读
2017/03/27 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
python ansible服务及剧本编写
2017/12/29 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
使用python3构建文件传输的方法
2019/02/13 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
python set集合使用方法解析
2019/11/05 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
存储过程的优点有哪些
2012/09/27 面试题
《记金华的双龙洞》教学反思
2014/04/19 职场文书
个人投资计划书
2014/05/01 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
行政申诉状范文
2015/05/20 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
学校财务管理制度
2015/08/04 职场文书
心得体会格式及范文
2016/01/25 职场文书