首页  >  文章  >  后端开发  >  如何使用 NumPy 切片有效地裁剪随机图像块?

如何使用 NumPy 切片有效地裁剪随机图像块?

Susan Sarandon
Susan Sarandon原创
2024-11-03 05:12:30973浏览

How can I efficiently crop random image patches using NumPy slicing?

高效使用多个 Numpy 切片进行随机图像裁剪

简介:
在机器学习和计算机视觉中在应用程序中,图像裁剪是模型训练或推理之前预处理图像的一项关键任务。裁剪有助于提取相关的感兴趣区域并降低处理大图像的计算复杂度。

高效裁剪方法:
基于循环的裁剪方法,如问题所示,可以是对于大型数据集计算效率低下。为了解决这个问题,我们可以利用 numpy 的高级索引和基于跨步的方法。

利用基于跨步的方法:
Numpy 的 np.lib.stride_tricks.as_strided 函数允许提取跨步不复制数据的数组视图。该技术可以与 scikit-image 的 view_as_windows 函数结合使用,在输入图像数组上创建滑动窗口。

滑动窗口的说明:
view_as_windows 在输入中创建视图数组数组,其中每个视图代表一个滑动窗口。 window_shape 参数指定滑动窗口的形状。通过为我们不想滑动的轴传递 1,我们可以创建单一维度,稍后可以对其进行索引以获得所需的裁剪窗口。

代码实现:
以下代码演示了使用滑动窗口的高效裁剪方法:

<code class="python">from skimage.util.shape import view_as_windows

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

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

# Rearrange format
out = out.transpose(0, 2, 3, 1)</code>

此代码有效地为每个图像生成随机 (x_offset, y_offset) 对,并将相应的 16x16 裁剪提取到形状数组 (4, 16, 16, 3),不会产生不必要的内存开销。

以上是如何使用 NumPy 切片有效地裁剪随机图像块?的详细内容。更多信息请关注PHP中文网其他相关文章!

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