Efficient Numpy Slicing for Random Image Cropping
Para corte eficiente de patches aleatórios de 16x16 de uma matriz 4D Numpy representando múltiplas imagens coloridas (onde o primeira dimensão é o número de imagens, e a segunda e terceira são a mesma largura e altura), uma abordagem baseada em passos pode ser utilizado.
Utilizando np.lib.stride_tricks.as_strided ou view_as_windows do scikit-image
Esses métodos criam janelas deslizantes como visualizações na matriz de entrada, reduzindo a sobrecarga de memória. O view_as_windows do Scikit-image simplifica a configuração especificando o formato da janela como uma tupla cujos elementos correspondem às dimensões da matriz de entrada. Os eixos para deslizamento recebem comprimentos de janela e outros eixos são definidos como 1.
Exemplo de código
# 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)
Este código gera quatro pares aleatórios (x_offset, y_offset) e extrai 4 patches aleatórios 16x16 dentro dos parâmetros fornecidos, com sobrecarga mínima de memória.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3