高效地使用多个 Numpy 切片进行随机图像裁剪
这个问题寻求一种有效的方法来从包含 4 的 numpy 数组中执行随机图像裁剪三维图像。目标是从四个图像中提取 16x16 窗口裁剪,确保每个图像都有不同的裁剪。
一个建议的解决方案采用简单的 for 循环为每个图像生成随机偏移,并将这些偏移应用于 numpy 切片。然而,为了在不牺牲内存开销的情况下实现最佳效率,我们探索了替代方法。
利用步幅和花式索引
一种方法涉及利用 numpy 的 stride_tricks.as_strided 来创建滑动充当输入数组视图的窗口。这避免了内存重复并提供了虚拟自由操作。
scikit-image 的 view_as_windows 函数通过创建具有指定窗口大小的滑动窗口并沿其他维度滑动轴来简化此过程。使用此函数,我们可以有效地提取所需的 16x16 窗口裁剪,确保每个图像的随机偏移。
实现
提供的 Python 代码演示了 view_as_windows 的应用实现随机图像裁剪,同时保持高效的内存占用:
<code class="python">from skimage.util.shape import view_as_windows # Obtain sliding windows w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0] # Retrieve specific windows using random offsets out = w[np.arange(X.shape[0]), x, y] # Rearrange to match the output format of the loop-based approach out = out.transpose(0,2,3,1)</code>
这种方法提供了与基于循环的方法相比,更有效的随机图像裁剪解决方案,同时有效解决内存开销问题。
以上是如何使用 Numpy Slices 高效裁剪多个图像?的详细内容。更多信息请关注PHP中文网其他相关文章!