def get_effective_nonoverlapping_masks(geometries, img_size=None): ''' Find nonoverlapping objects from given list of geometries :param geometries: list of geometry type objects(Point, Polygon, PolyLine, Bitmap etc.) :param img_size: tuple or list of integers :return: list of bitmaps, numpy array ''' if img_size is None: if len(geometries) > 0: common_bbox = Rectangle.from_geometries_list(geometries) img_size = (common_bbox.bottom + 1, common_bbox.right + 1) else: img_size = (0, 0) canvas = np.full(shape=img_size, fill_value=len(geometries), dtype=np.int32) for idx, geometry in enumerate(geometries): geometry.draw(canvas, color=idx) result_masks = [] for idx, geometry in enumerate(geometries): effective_indicator = (canvas == idx) if np.any(effective_indicator): result_masks.append(Bitmap(effective_indicator)) else: result_masks.append(None) return result_masks, canvas
def to_bbox(self): ''' The function to_bbox create Rectangle class object from current GraphNodes class object :return: Rectangle class object ''' return Rectangle.from_geometries_list( [Point.from_point_location(node.location) for node in self._nodes.values()])
def get_geometries_iou(geometry_1: Geometry, geometry_2: Geometry): if isinstance(geometry_1, Rectangle): return get_iou_rect(geometry_1, geometry_2) elif isinstance(geometry_2, Rectangle): return get_iou_rect(geometry_2, geometry_1) else: common_bbox = Rectangle.from_geometries_list((geometry_1, geometry_2)) g1 = geometry_1.relative_crop(common_bbox)[0] g2 = geometry_2.relative_crop(common_bbox)[0] mask_1 = np.full(common_bbox.to_size(), False) g1.draw(mask_1, color=True) mask_2 = np.full(common_bbox.to_size(), False) g2.draw(mask_2, color=True) return safe_ratio((mask_1 & mask_2).sum(), (mask_1 | mask_2).sum())
def get_effective_nonoverlapping_masks(geometries, img_size=None): if img_size is None: if len(geometries) > 0: common_bbox = Rectangle.from_geometries_list(geometries) img_size = (common_bbox.bottom + 1, common_bbox.right + 1) else: img_size = (0, 0) canvas = np.full(shape=img_size, fill_value=len(geometries), dtype=np.int32) for idx, geometry in enumerate(geometries): geometry.draw(canvas, color=idx) result_masks = [] for idx, geometry in enumerate(geometries): effective_indicator = (canvas == idx) if np.any(effective_indicator): result_masks.append(Bitmap(effective_indicator)) else: result_masks.append(None) return result_masks, canvas
def to_bbox(self): return Rectangle.from_geometries_list([ Point.from_point_location(node.location) for node in self._nodes.values() ])