Каков наиболее эффективный способ случайного выбора одного положительного местоположения в большом изображении двоичной Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Каков наиболее эффективный способ случайного выбора одного положительного местоположения в большом изображении двоичной

Сообщение Anonymous »

Я пишу специальную функцию загрузки данных изображения, которая случайным образом обрезает часть большого изображения в соответствии с его двоичной маской. Функция будет использоваться в загрузчике данных PyTorch, поэтому я хочу, чтобы она работала как можно быстрее и эффективно использовала память. Изображение и маска довольно большие, так как ширина и высота составляют порядка 10–20 тыс. пикселей.
Я хочу, чтобы каждая обрезка изображения содержала хотя бы одну положительную точку. в бинарной маске. Мое текущее решение состоит в том, чтобы сначала случайным образом выбрать одну положительную точку из изображения маски, а затем создать вокруг нее рамку обрезки. Реализация содержит следующий раздел кода:

Код: Выделить всё

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])

После профилирования всей функции с помощью line_profiler я обнаружил, что строка Mask_loc = np.where(mask_np) является одним из узких мест производительности. Как я могу оптимизировать эту часть? Есть ли другой, более эффективный способ случайной выборки одной положительной точки из двоичного изображения?


Подробнее здесь: https://stackoverflow.com/questions/792 ... within-a-l
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»