Я хочу, чтобы каждая обрезка изображения содержала хотя бы одну положительную точку. в бинарной маске. Мое текущее решение состоит в том, чтобы сначала случайным образом выбрать одну положительную точку из изображения маски, а затем создать вокруг нее рамку обрезки. Реализация содержит следующий раздел кода:
Код: Выделить всё
import PIL
import numpy as np
... # Some preprocessing to find all mask and image files
mask = PIL.Image.open(mask_file) # both the width and height have 10k~20k pixels.
# fast_pil_to_numpy: https://uploadcare.com/blog/fast-import-of-pillow-images-to-numpy-opencv-arrays/
mask_np = fast_pil_to_numpy(mask).astype(bool) # dim: [height, width]
mask_loc = np.where(mask_np) # get (loc_y, loc_x) of all positive indices
idx = np.random.randint(low=0, high=len(mask_loc[0]))
... # Generate a crop box around (mask_loc[1][idx], mask_loc[0][idx])
Подробнее здесь: https://stackoverflow.com/questions/792 ... within-a-l