2017-10-03 2 views
0

J'ai un tableau numérique de forme (12,224,224). Ceci est 12 images de taille (244, 244). Quand j'avais une seule image, c'était simple. L'image était de taille (x,y). Par exemple, x est une image de taille (400,400), pour lequel je pourrais utiliser view_as_blocks comme ceci:Comment utiliser la vue en tant que blocs dans Scikit-Image?

from skimage.util import view_as_blocks as vablks 
xx = vablks(x, block_shape=(8,8)) 

Cela se traduirait par un bloc de forme (50,50,8,8). Maintenant, je voudrais savoir comment l'appliquer quand j'ai une liste d'images. Soit je perds la forme, c'est-à-dire que mes 12 images sont combinées en un seul bloc (224.224) décomposé en (28,28,8,8), ou je rencontre un ValueError. Voici le code que j'essayé d'utiliser pour itérer sur les 12 images et visualiser les images (224,224) en forme

xx = [] 
for item_ in x: 
    xx.append(blockSplitter(item_)) 

où x est une liste d'images.

Voici l'erreur:

ValueError: 'block_shape' is not compatible with 'arr_in' 

Dans l'ensemble, je voudrais savoir comment afficher les images sous forme de blocs de 8x8 sans perdre les images. Aide, s'il vous plaît et merci.

Répondre

1

Vous avez au moins deux options:

1) Convertir la liste à un tableau, comme suggéré par l'intervenant ci-dessus. Ensuite, utilisez view_as_blocks avec les paramètres appropriés:

from skimage.util import view_as_blocks 
images = [np.zeros((50, 50)) for i in range(10)] 
images = np.array(images) 
all_blocks = view_as_blocks(images, block_shape=(1, 10, 10)).squeeze() 

2) Convertir chaque élément de la liste à une vue fenêtré, puis convertir le résultat final à un tableau:

from skimage.util import view_as_blocks 
images = [np.zeros((50, 50)) for i in range(10)] 
image_blocks = [view_as_blocks(image, block_shape=(10, 10)) for image in images] 
all_blocks = np.array(image_blocks)