【发布时间】:2018-07-02 17:36:25
【问题描述】:
我有以下批处理的 RGB 图像数组(4D 数组):
In [55]: img_arr = np.random.randint(0, 255, (10000, 32, 32, 3))
现在,我只想从左上角跨所有3 通道裁剪某些维度,比如(12x12),最好还沿着批处理维度(即axis 0)裁剪,全部合二为一走。我的想法是制作一个网格并对其进行切片。所以,我构建了这个网格:
In [56]: grid = np.c_[np.arange(12)]+ np.r_[np.arange(12)]
In [57]: grid.shape
Out[57]: (12, 12)
但是,当我对数组进行切片时,我得到了一些意想不到的东西:
In [58]: img_arr[:, grid, :].shape
Out[58]: (10000, 12, 12, 32, 3)
我期望并且需要结果是 (10000, 12, 12, 3) 的形状,但我不知道 32 的来源。
这只是一个例子。理想情况下,我想在图像上的 10 个不同位置进行裁剪,即。左上、右上、左下、右下等,
但是,首先进行左上角裁剪,其余的应该是直观的。
此外,如您所见,我需要在单个 4D 数组中沿批量维度存储超过 100K 的图像,因此在进行此类随机裁剪时拥有 视图 会非常好,因为它会节省内存。
【问题讨论】:
-
您打算如何在数学上介绍这 10 个职位?也许
(x,y)每个补丁的开始(左上角点)? -
@Divakar 每个原始图像裁剪部分位于:
top-left, top-right, bottom-left, bottom-right, center crop;然后,水平翻转图像并再次裁剪:top-left, top-right, bottom-left, bottom-right, and center crop。数据增强:) -
是的,然后按照发布的答案中的建议对其进行切片。对于水平翻转,使用
a[:,::-1]并使用相同的切片,即a[:,::-1][:,:12,:12,:]等等。对于垂直翻转:a[:,:,::-1]. -
@Divakar 哦,太酷了!因此,我们只需拥有一份原始数组即可实现一切。您想将其添加为答案吗?
-
希望您添加一些来源(文档)并将其添加为答案:)
标签: python numpy image-processing multidimensional-array computer-vision