如何在 Scikit-Image 中将视图用作块?

The*_*ank 3 python numpy scikit-image

我有一个 numpy 数组 shape (12,224,224)。这是 12 张大小的图像(244, 244)。当我只有一张图片时,这很简单。图像的大小(x,y)。例如,x是一个 size 的图像(400,400),我可以这样使用view_as_blocks

from skimage.util import view_as_blocks as vablks
xx = vablks(x, block_shape=(8,8))
Run Code Online (Sandbox Code Playgroud)

这将导致形状块(50,50,8,8)。现在我想知道当我有图像列表时如何应用它。要么我失去了形状,即我的 12 个图像被组合成一个 (224,224) 块,分解为(28,28,8,8),或者我遇到了 ValueError。这是我尝试用于迭代 12 张图像并查看(224,224)成形图像的代码

xx = []
for item_ in x:
    xx.append(blockSplitter(item_))
Run Code Online (Sandbox Code Playgroud)

其中 x 是图像列表。

这是错误:

ValueError: 'block_shape' is not compatible with 'arr_in'
Run Code Online (Sandbox Code Playgroud)

总的来说,我想知道如何在不丢失图像的情况下以 8x8 块的形式查看图像。帮助,请和谢谢。

Ste*_*alt 5

你至少有两个选择:

1)按照上述评论者的建议,将列表转换为数组。然后使用view_as_blocks正确的参数:

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()
Run Code Online (Sandbox Code Playgroud)

2) 将列表中的每一项转换为窗口视图,然后将最终结果转换为数组:

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)
Run Code Online (Sandbox Code Playgroud)