Esempio n. 1
0
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
Esempio n. 2
0
 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()])
Esempio n. 3
0
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())
Esempio n. 4
0
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
Esempio n. 5
0
 def to_bbox(self):
     return Rectangle.from_geometries_list([
         Point.from_point_location(node.location)
         for node in self._nodes.values()
     ])