python实现交并比IOU
生活随笔
收集整理的這篇文章主要介紹了
python实现交并比IOU
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? 交并比(Intersection-over-Union,IoU),目標檢測中使用的一個概念,是產生的候選框(candidate bound)與原標記框(ground truth bound)的交疊率,即它們的交集與并集的比值。最理想情況是完全重疊,即比值為1。
計算公式:
?
Python實現代碼:
def cal_iou(box1, box2):""":param box1: = [xmin1, ymin1, xmax1, ymax1]:param box2: = [xmin2, ymin2, xmax2, ymax2]:return: """xmin1, ymin1, xmax1, ymax1 = box1xmin2, ymin2, xmax2, ymax2 = box2# 計算每個矩形的面積s1 = (xmax1 - xmin1) * (ymax1 - ymin1) # C的面積s2 = (xmax2 - xmin2) * (ymax2 - ymin2) # G的面積# 計算相交矩形xmin = max(xmin1, xmin2)ymin = max(ymin1, ymin2)xmax = min(xmax1, xmax2)ymax = min(ymax1, ymax2)w = max(0, xmax - xmin)h = max(0, ymax - ymin)area = w * h # C∩G的面積iou = area / (s1 + s2 - area)return iou參考:https://blog.csdn.net/qq_30622831/article/details/85144849
# -*-coding: utf-8 -*- """@Project: IOU@File : IOU.py@Author : panjq@E-mail : pan_jinquan@163.com@Date : 2018-10-14 10:44:06 """ def calIOU_V1(rec1, rec2):"""computing IoU:param rec1: (y0, x0, y1, x1), which reflects(top, left, bottom, right):param rec2: (y0, x0, y1, x1):return: scala value of IoU"""# 計算每個矩形的面積S_rec1 = (rec1[2] - rec1[0]) * (rec1[3] - rec1[1])S_rec2 = (rec2[2] - rec2[0]) * (rec2[3] - rec2[1])# computing the sum_areasum_area = S_rec1 + S_rec2# find the each edge of intersect rectangleleft_line = max(rec1[1], rec2[1])right_line = min(rec1[3], rec2[3])top_line = max(rec1[0], rec2[0])bottom_line = min(rec1[2], rec2[2])# judge if there is an intersectif left_line >= right_line or top_line >= bottom_line:return 0else:intersect = (right_line - left_line) * (bottom_line - top_line)return intersect/(sum_area - intersect)def calIOU_V2(rec1, rec2):"""computing IoU:param rec1: (y0, x0, y1, x1), which reflects(top, left, bottom, right):param rec2: (y0, x0, y1, x1):return: scala value of IoU"""# cx1 = rec1[0]# cy1 = rec1[1]# cx2 = rec1[2]# cy2 = rec1[3]# gx1 = rec2[0]# gy1 = rec2[1]# gx2 = rec2[2]# gy2 = rec2[3]cx1,cy1,cx2,cy2=rec1gx1,gy1,gx2,gy2=rec2# 計算每個矩形的面積S_rec1 = (cx2 - cx1) * (cy2 - cy1) # C的面積S_rec2 = (gx2 - gx1) * (gy2 - gy1) # G的面積# 計算相交矩形x1 = max(cx1, gx1)y1 = max(cy1, gy1)x2 = min(cx2, gx2)y2 = min(cy2, gy2)w = max(0, x2 - x1)h = max(0, y2 - y1)area = w * h # C∩G的面積iou = area / (S_rec1 + S_rec2 - area)return iouif __name__=='__main__':rect1 = (661, 27, 679, 47)# (top, left, bottom, right)rect2 = (662, 27, 682, 47)iou1 = calIOU_V1(rect1, rect2)iou2 = calIOU_V2(rect1, rect2)print(iou1)print(iou2)?
總結
以上是生活随笔為你收集整理的python实现交并比IOU的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow模型实现:UNet模
- 下一篇: CUDA学习笔记