math2tex / ScanSSD /gtdb /box_utils.py
duycse1603's picture
[Add] source
6163604
# Author: Parag Mali
# This file contains many common operations on the bounding boxes like finding intersection
from collections import OrderedDict
from . import feature_extractor
def check_inside(rectA, rectB):
# returns True if A is inside B
if rectA[0] >= rectB[0] and\
rectA[1] >= rectB[1] and\
rectA[2] <= rectB[2] and\
rectA[3] <= rectB[3]:
return True
return False
# check if two rectangles intersect
def intersects(first, other):
return not (first[2] < other[0] or
first[0] > other[2] or
first[1] > other[3] or
first[3] < other[1])
def find_intersecting_boxes(math_regions, sorted=True):
# specific for fusion algo
# returns indices of intersecting math region for each math region
inter_map = {}
for i in range(len(math_regions)):
inter_map[i] = []
for i in range(len(math_regions)):
for j in range(len(math_regions[i+1:])):
if intersects(math_regions[i], math_regions[i+1+j]):
inter_map[i].append(i+1+j)
#inter_map[i+1+j].append(i)
inter_map = OrderedDict(inter_map)
return inter_map
def merge(box1, box2):
final_box = [0,0,0,0]
final_box[0] = min(box1[0], box2[0]) # left
final_box[1] = min(box1[1], box2[1]) # top
final_box[2] = max(box1[2], box2[2]) # left + width
final_box[3] = max(box1[3], box2[3]) # top + height
return final_box
if __name__ == '__main__':
box1 = [849.00,3797.00,1403.00,3890.00]
box2 = [1169.00,3804.00,1392.00,3886.00]
print(intersects(box1, box2))
print(gtdb.feature_extractor.inclusion(box1, box2))
print(gtdb.feature_extractor.inclusion(box2, box1))
print(gtdb.feature_extractor.iou(box2, box1))