Bitmap¶
-
class Bitmap(data, origin=
None, sly_id=None, class_id=None, labeler_login=None, updated_at=None, created_at=None, extra_validation=True)[source]¶ Bases:
BitmapBaseBinary or grayscale 2D mask with origin; used for segmentation. Immutable.
Bitmap geometry for a single
Label.Bitmapobject is immutable.- Parameters:
- data : np.ndarray¶
Bitmap mask data. Must be a numpy array with only 2 unique values: [0, 1] or [0, 255] or [False, True].
- origin=
None¶ PointLocation: top, left corner of Bitmap. Position of the Bitmap within image.- sly_id : int, optional¶
Bitmap ID in Supervisely server.
- class_id : int, optional¶
ID of ObjClass to which Bitmap belongs.
- labeler_login : str, optional¶
Login of the user who created
Bitmap.- updated_at : str, optional¶
Date and Time when Bitmap was modified last. Date Format: Year:Month:Day:Hour:Minute:Seconds. Example: ‘2021-01-22T19:37:50.158Z’.
- created_at : str, optional¶
Date and Time when Bitmap was created. Date Format is the same as in “updated_at” parameter.
- extra_validation : bool, optional¶
If True, additional validation is performed. Throws a ValueError if values of the data are not one of [0, 1], [0, 255], [True, False]. This option affects performance. If False, the mask is converted to dtype np.bool.
:raises ValueError, if data is not bool or no pixels set to True in data
- Usage Example:
import supervisely as sly # Create simple bitmap mask = np.array([[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]], dtype=np.bool_) figure = sly.Bitmap(mask) # Note, when creating a bitmap, the specified mask is cut off by positive values, based on this, a origin is formed: print(figure.data) # Output: # [[ True True True] # [ True False True] # [ True True True]] origin = figure.origin.to_json() print(json.dumps(origin, indent=4)) # Output: { # "points": { # "exterior": [ # [ # 1, # 1 # ] # ], # "interior": [] # } # Create bitmap from black and white image: img = sly.imaging.image.read(os.path.join(os.getcwd(), 'black_white.jpeg')) mask = img[:, :, 0].astype(bool) # Get 2-dimensional bool numpy array figure = sly.Bitmap(mask)
Methods
Returns the allowed transforms for the AlphaMask.
Convert base64 encoded string to numpy array.
Make bitwise operations between a given numpy array and Bitmap.
Clone from GEOMETRYYY
Convert geometry config from json format
Convert geometry config to json format
Convert geometry to another geometry shape.
Crops current Bitmap.
Convert numpy array to base64 encoded string.
Draws the figure contour on a given bitmap canvas :param bitmap: np.ndarray :param color: [R, G, B] :param thickness: (int) :param config: drawing config specific to a concrete subclass, e.g. per edge colors.
Flip current Bitmap in horizontal.
Flip current Bitmap in vertical.
Convert a json dict to BitmapBase.
Read bitmap from image by path.
Returns the name of the geometry.
Returns 2D boolean mask of the geometry.
Get the name of the geometry.
Crops object like "crop" method, but return results with coordinates relative to rect :param rect: Rectangle for crop.
Resizes current Bitmap.
Rotates current Bitmap.
Scale current Bitmap.
Compute the skeleton, medial axis transform or morphological thinning of Bitmap.
Create
Rectangleobject from current Bitmap.Get list of contours in Bitmap.
Convert the BitmapBase to a json dict.
Translate current Bitmap.
Validate geometry.
Attributes
Bitmap area.
Get mask data of Bitmap.
Position of the Bitmap within image.
- classmethod from_json(json_data)¶
Convert a json dict to BitmapBase. Read more about Supervisely format.
- Parameters:
- Returns:
Bitmap.
- Return type:
- Usage Example:
import supervisely as sly figure_json = { "bitmap": { "origin": [1, 1], "data": "eJzrDPBz5+WS4mJgYOD19HAJAtLMIMwIInOeqf8BUmwBPiGuQPr///9Lb86/C2QxlgT5BTM4PLuRBuTwebo4hlTMSa44sKHhISMDuxpTYrr03F6gDIOnq5/LOqeEJgDM5ht6" }, "shape": "bitmap", "geometryType": "bitmap" } figure = sly.Bitmap.from_json(figure_json)
- classmethod name()¶
Get the name of the geometry.
Same as
geometry_name(), but shorter. In order to make the code more concise.- Returns:
string with name of geometry
- static base64_2_data(s)[source]¶
Convert base64 encoded string to numpy array. Supports both compressed and uncompressed masks.
- Parameters:
- Returns:
Bool numpy array
- Return type:
np.ndarray
- Usage Example:
import supervisely as sly encoded_string = 'eJzrDPBz5+WS4mJgYOD19HAJAtLMIMwIInOeqf8BUmwBPiGuQPr///9Lb86/C2QxlgT5BTM4PLuRBuTwebo4hlTMSa44sKHhISMDuxpTYrr03F6gDIOnq5/LOqeEJgDM5ht6' figure_data = sly.Bitmap.base64_2_data(encoded_string) print(figure_data) # [[ True True True] # [ True False True] # [ True True True]] uncompressed_string = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA' boolean_mask = sly.Bitmap.base64_2_data(uncompressed_string) print(boolean_mask) # [[ True True True] # [ True False True] # [ True True True]]
- static data_2_base64(mask)[source]¶
Convert numpy array to base64 encoded string.
- Parameters:
- mask : np.ndarray¶
Bool numpy array.
- Returns:
Base64 encoded string
- Return type:
- Usage Example:
import os from dotenv import load_dotenv import supervisely as sly # Load secrets and create API object from .env file (recommended) # Learn more here: https://developer.supervisely.com/getting-started/basics-of-authentication if sly.is_development(): load_dotenv(os.path.expanduser("~/supervisely.env")) api = sly.Api.from_env() # Get annotation from API meta_json = api.project.get_meta(PROJECT_ID) meta = sly.ProjectMeta.from_json(meta_json) ann_info = api.annotation.download(IMAGE_ID) ann = sly.Annotation.from_json(ann_info.annotation, meta) # Get Bitmap from annotation for label in ann.labels: if type(label.geometry) == sly.Bitmap: figure = label.geometry encoded_string = sly.Bitmap.data_2_base64(figure.data) print(encoded_string) # 'eJzrDPBz5+WS4mJgYOD19HAJAtLMIMwIInOeqf8BUmwBPiGuQPr///9Lb86/C2QxlgT5BTM4PLuRBuTwebo4hlTMSa44sKHhISMDuxpTYrr03F6gDIOnq5/LOqeEJgDM5ht6'
- bitwise_mask(full_target_mask, bit_op)[source]¶
Make bitwise operations between a given numpy array and Bitmap.
- Parameters:
- full_target_mask : np.ndarray¶
Input numpy array.
- bit_op¶
Type of bitwise operation(and, or, not, xor), uses numpy logic functions.
- Returns:
Bitmap or empty list.
- Return type:
- Usage Example:
import supervisely as sly mask = np.array([[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]], dtype=np.bool_) figure = sly.Bitmap(mask) array = np.array([[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]], dtype=np.bool_) bitwise_figure = figure.bitwise_mask(array, np.logical_and) print(bitwise_figure.data) # Output: # [[ True True True] # [False False False] # [False True False]]
- clone()¶
Clone from GEOMETRYYY
-
convert(new_geometry, contour_radius=
0, approx_epsilon=None)¶ Convert geometry to another geometry shape.
-
draw_contour(bitmap, color, thickness=
1, config=None)¶ Draws the figure contour on a given bitmap canvas :param bitmap: np.ndarray :param color: [R, G, B] :param thickness: (int) :param config: drawing config specific to a concrete subclass, e.g. per edge colors
- fliplr(img_size)¶
Flip current Bitmap in horizontal.
- Parameters:
- Returns:
Flipped bitmap in horizontal.
- Return type:
- Usage Example:
# Remember that Bitmap class object is immutable, and we need to assign new instance of Bitmap to a new variable height, width = 300, 400 fliplr_figure = figure.fliplr((height, width))
- flipud(img_size)¶
Flip current Bitmap in vertical.
- Parameters:
- Returns:
Flipped bitmap in vertical.
- Return type:
- Usage Example:
# Remember that Bitmap class object is immutable, and we need to assign new instance of Bitmap to a new variable height, width = 300, 400 flipud_figure = figure.flipud((height, width))
- get_mask(img_size)¶
Returns 2D boolean mask of the geometry. With shape as img_size (height, width) and filled with True values inside the geometry and False values outside. dtype = np.bool shape = img_size
- relative_crop(rect)¶
Crops object like “crop” method, but return results with coordinates relative to rect :param rect: Rectangle for crop. :type rect:
Rectangle:returns: List of Geometry after relative crop. :rtype: List[Geometry]` :raises NotImplementedError: if method is not implemented in subclass
- resize(in_size, out_size)[source]¶
Resizes current Bitmap.
- Parameters:
- Returns:
Resized bitmap.
- Return type:
- Usage Example:
in_height, in_width = 800, 1067 out_height, out_width = 600, 800 # Remember that Bitmap class object is immutable, and we need to assign new instance of Bitmap to a new variable resize_figure = figure.resize((in_height, in_width), (out_height, out_width))
- rotate(rotator)[source]¶
Rotates current Bitmap.
- Parameters:
- rotator¶
ImageRotator for Bitamp rotation.
- Returns:
Bitmapobject- Return type:
- Usage Example:
import supervisely as sly from supervisely.geometry.image_rotator import ImageRotator height, width = ann.img_size rotator = ImageRotator((height, width), 25) # Remember that Bitmap class object is immutable, and we need to assign new instance of Bitmap to a new variable rotate_figure = figure.rotate(rotator)
- scale(factor)¶
Scale current Bitmap.
- Parameters:
- Returns:
Scaled bitmap.
- Return type:
- Usage Example:
# Remember that Bitmap class object is immutable, and we need to assign new instance of Bitmap to a new variable scale_figure = figure.scale(0.75)
- skeletonize(method_id)[source]¶
Compute the skeleton, medial axis transform or morphological thinning of Bitmap.
- Parameters:
- method_id¶
Method to convert bool numpy array.
- Returns:
Skeletonized bitmap.
- Return type:
- Usage Example:
# Remember that Bitmap class object is immutable, and we need to assign new instance of Bitmap to a new variable skeleton_figure = figure.skeletonize(SkeletonizeMethod.SKELETONIZE) med_ax_figure = figure.skeletonize(SkeletonizeMethod.MEDIAL_AXIS) thin_figure = figure.skeletonize(SkeletonizeMethod.THINNING)
- to_bbox()¶
Create
Rectangleobject from current Bitmap.- Returns:
Rectangle from bitmap.
- Return type:
- Usage Example:
rectangle = figure.to_bbox()
- to_contours()[source]¶
Get list of contours in Bitmap.
- Returns:
List of polygons from bitmap.
- Return type:
List[
Polygon]- Usage Example:
figure_contours = figure.to_contours()
- to_json()¶
Convert the BitmapBase to a json dict. Read more about Supervisely format.
- Returns:
Json format as a dict
- Return type:
- Usage Example:
import supervisely as sly mask = np.array([[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]], dtype=np.bool_) figure = sly.Bitmap(mask) figure_json = figure.to_json() print(json.dumps(figure_json, indent=4)) # Output: { # "bitmap": { # "origin": [1, 1], # "data": "eJzrDPBz5+WS4mJgYOD19HAJAtLMIMwIInOeqf8BUmwBPiGuQPr///9Lb86/C2QxlgT5BTM4PLuRBuTwebo4hlTMSa44sKHhISMDuxpTYrr03F6gDIOnq5/LOqeEJgDM5ht6" # }, # "shape": "bitmap", # "geometryType": "bitmap" # }
- translate(drow, dcol)¶
Translate current Bitmap.
- Parameters:
- Returns:
Translated bitmap.
- Return type:
- Usage Example:
# Remember that Bitmap class object is immutable, and we need to assign new instance of Bitmap to a new variable translate_figure = figure.translate(150, 250)
- validate(obj_class_shape, settings)¶
Validate geometry.
- Parameters:
- Raises:
ValueError – if geometry validation error
- property data : numpy.ndarray¶
Get mask data of Bitmap.
- Returns:
Data of
Bitmap.- Return type:
np.ndarray
- property origin : supervisely.geometry.point_location.PointLocation¶
Position of the Bitmap within image.
- Returns:
Top, left corner of
Bitmap.- Return type: