Calculating the intersection ratio of two rectangles is usually used as a detection index in the detection task. The difference between your predicted bbox and groundtruth can be reflected through IOU. Very simple algorithm implementation, I also wrote one casually, well, very simple.
#! /usr/bin/env python
# encoding: utf-8
def compute_iou(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
"""
# computing area of each rectangles
S_rec1 =(rec1[2]- rec1[0])*(rec1[3]- rec1[1])
S_rec2 =(rec2[2]- rec2[0])*(rec2[3]- rec2[1])
# computing the sum_area
sum_area = S_rec1 + S_rec2
# find the each edge of intersect rectangle
left_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 intersect
if left_line = right_line or top_line = bottom_line:return0else:
intersect =(right_line - left_line)*(bottom_line - top_line)return(intersect /(sum_area - intersect))*1.0if __name__=='__main__':
rect1 =(661,27,679,47)
# ( top, left, bottom, right)
rect2 =(662,27,682,47)
iou =compute_iou(rect1, rect2)print(iou)
Supplementary knowledge: IOU algorithm based on Python-the simplest and easy to understand code implementation
Concept introduction:
Intersection over Union: (Intersection over Union)
As shown in the figure above, the IOU value is positioned as the ratio of the intersection and union of the areas of two rectangular boxes. which is:
The implementation of cross-to-comparison is also very simple, the execution process is as follows:
IOU_W = min(x1,x2,x3,x4)+w1+w2-max(x1,x2,x3,x4)
IOU_H = min(y1,y2,y3,y4)+h1+h2-max(y1,y2,y3,y4)
In fact, it is a very simple geometric relationship transformation. The above diagram can help you understand this meaning well.
Code implementation: 001-IOU calculation
The above python implementation of IOU calculation case is all the content shared by the editor, I hope to give you a reference.
Recommended Posts