Skip to content Skip to sidebar Skip to footer

Multiple Images Numpy Array Into Blocks

I have a numpy array with 1000 RGB images with shape (1000, 90, 90, 3) and I need to work on each image, but sliced in 9 blocks. I've found many solution for slicing a single image

Solution 1:

I would do smth like what I do in the code below. In my example I used parts of images from skimage.data to illustrate my method and made the shapes and sizes different so that it will look prettier. But you can do the same for your dta by adjusting those parameters.

from skimage import data
from matplotlib import pyplot as plt
import numpy as np

astronaut = data.astronaut()
coffee    = data.coffee()

arr = np.stack([coffee[:400, :400, :], astronaut[:400, :400, :]])
plt.imshow(arr[0])
plt.title('arr[0]')
plt.figure()
plt.imshow(arr[1])
plt.title('arr[1]')

arr_blocks = arr.reshape(arr.shape[0], 4, 100, 4, 100, 3, ).swapaxes(2, 3)
arr_blocks = arr_blocks.reshape(-1, 100, 100, 3)


for i, block inenumerate(arr_blocks):
    plt.figure(10+i//16, figsize = (10, 10))
    plt.subplot(4, 4, i%16+1)
    plt.imshow(block)
    plt.title(f'block {i}')

# batch_size = 9# some_outputs_list = []# for i in range(arr_blocks.shape[0]//batch_size + ((arr_blocks.shape[0]%batch_size) > 0)):#     some_outputs_list.append(some_function(arr_blocks[i*batch_size:(i+1)*batch_size]))

Output:

enter image description here

enter image description here

enter image description here

Post a Comment for "Multiple Images Numpy Array Into Blocks"