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编程修改MP3文件名称的方法
Apr 19 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
May 08 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
深入分析python数据挖掘 Json结构分析
Apr 21 Python
pygame实现简易飞机大战
Sep 11 Python
用Python解决x的n次方问题
Feb 08 Python
详解django中url路由配置及渲染方式
Feb 25 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
python开发一个解析protobuf文件的简单编译器
Nov 17 Python
利用python绘制正态分布曲线
Jan 04 Python
python编程实现清理微信重复缓存文件
Nov 01 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中常用编辑器推荐
2007/01/02 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
AngularJS中取消对HTML片段转义的方法例子
2015/01/04 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
js replace替换字符串同时替换多个方法
2018/11/27 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
python3大文件解压和基本操作
2017/12/15 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
Python使用Pygame绘制时钟
2020/11/29 Python
英国领先的独立时装店:Van Mildert
2019/10/28 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
采购部部长岗位职责
2014/02/06 职场文书
个人委托书范文
2015/01/28 职场文书
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python