首页  >  文章  >  后端开发  >  如何使用基于跨步的切片从 4D Numpy 数组中高效地裁剪随机图像补丁?

如何使用基于跨步的切片从 4D Numpy 数组中高效地裁剪随机图像补丁?

Susan Sarandon
Susan Sarandon原创
2024-11-03 14:05:03252浏览

How to Efficiently Crop Random Image Patches from a 4D Numpy Array using Strided-Based Slicing?

用于随机图像裁剪的高效 Numpy 切片

用于从表示多个彩色图像的 4D Numpy 数组中高效裁剪随机 16x16 块(其中第一个维度是图像的数量,第二个和第三个维度是相等的宽度和高度),可以使用基于跨步的方法。

利用 np.lib.stride_tricks.as_strided 或 scikit- image 的 view_as_windows

这些方法创建滑动窗口作为输入数组的视图,从而减少内存开销。 Scikit-image 的 view_as_windows 通过将窗口形状指定为元组(其元素对应于输入数组的维度)来简化设置。滑动的轴指定窗口长度,其他轴设置为 1。

代码示例

<code class="python"># Import scikit-image for view_as_windows
from skimage.util.shape import view_as_windows

# Get sliding windows
w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0]

# Generate random per-image offsets
x = np.random.randint(0,12,X.shape[0])
y = np.random.randint(0,12,X.shape[0])

# Index and extract specific windows
out = w[np.arange(X.shape[0]),x,y]

# Reformat if necessary
out = out.transpose(0,2,3,1)</code>

此代码生成四个随机 (x_offset, y_offset) 对并在给定参数内以最小的内存开销提取 4 个随机 16x16 补丁。

以上是如何使用基于跨步的切片从 4D Numpy 数组中高效地裁剪随机图像补丁?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn