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

时间:2017-10-03 15:42:38

标签: python numpy scikit-image

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

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

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

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

其中x是图像列表。

这是错误:

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

总的来说,我想知道如何在不丢失图像的情况下将图像视为8x8的块。 帮助,请和谢谢。

1 个答案:

答案 0 :(得分:4)

您至少有两个选择:

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()

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)