我有一个形状为(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的块。 帮助,请和谢谢。
答案 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)