Lim0011's picture
Upload 251 files
85e3d20 verified
import numpy as np
def rle_encode(x, fg_val=1):
"""
Args:
x: numpy array of shape (height, width), 1 - mask, 0 - background
Returns: run length encoding as list
"""
dots = np.where(
x.T.flatten() == fg_val)[0] # .T sets Fortran order down-then-right
run_lengths = []
prev = -2
for b in dots:
if b > prev + 1:
run_lengths.extend((b + 1, 0))
run_lengths[-1] += 1
prev = b
return run_lengths
def list_to_string(x):
"""
Converts list to a string representation
Empty list returns '-'
"""
if x: # non-empty list
s = str(x).replace("[", "").replace("]", "").replace(",", "")
else:
s = '-'
return s
def rle_decode(mask_rle, shape=(256, 256)):
'''
mask_rle: run-length as string formatted (start length)
empty predictions need to be encoded with '-'
shape: (height, width) of array to return
Returns numpy array, 1 - mask, 0 - background
'''
img = np.zeros(shape[0]*shape[1], dtype=np.uint8)
if mask_rle != '-':
s = mask_rle.split()
starts, lengths = [np.asarray(x, dtype=int) for x in (s[0:][::2], s[1:][::2])]
starts -= 1
ends = starts + lengths
for lo, hi in zip(starts, ends):
img[lo:hi] = 1
return img.reshape(shape, order='F')