Эффективное срезирование Numpy для случайной обрезки изображений
Для эффективного обрезки случайных фрагментов 16x16 из 4D-массива Numpy, представляющего многоцветные изображения (где первое измерение — это количество изображений, а второе и третье — равная ширина и высота), можно использовать подход, основанный на шагах.
Использование np.lib.stride_tricks.as_strided или scikit- image's view_as_windows
Эти методы создают скользящие окна в качестве представлений во входном массиве, уменьшая нагрузку на память. view_as_windows из Scikit-image упрощает настройку, определяя форму окна в виде кортежа, элементы которого соответствуют размерам входного массива. Осям скольжения присваиваются длины окон, а другим осям присваивается значение 1.
Пример кода
# Import scikit-image for view_as_windows
from skimage.util.shape import view_as_windows
# Get sliding windows
w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0]
# Generate random per-image offsets
x = np.random.randint(0,12,X.shape[0])
y = np.random.randint(0,12,X.shape[0])
# Index and extract specific windows
out = w[np.arange(X.shape[0]),x,y]
# Reformat if necessary
out = out.transpose(0,2,3,1)
Этот код генерирует четыре случайные пары (x_offset, y_offset) и извлекает 4 случайных патча 16x16 в пределах заданных параметров с минимальными затратами памяти.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3