”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用基于跨步的切片从 4D Numpy 数组中高效地裁剪随机图像补丁?

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

发布于2024-11-08
浏览:107

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。

代码示例

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

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

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3