You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Julia中高效获取图像的8×8二维滑动窗口?

Julia中高效提取图像滑动窗口的方案

问题描述

现有一张2000×2000像素的灰度图像,需要提取所有尺寸为8×8的滑动窗口(子数组),步长固定为1,功能等价于Python NumPy中的np.lib.stride_tricks.sliding_window_view(img, (8,8))。

已尝试方案

曾尝试ImageFiltering.jl中的mapwindow函数,但该函数不支持8×8这类偶数尺寸的窗口,即使指定border=Inner()参数也无法得到正确结果。

期望结果

对2000×2000的数组,得到1993×1993个(共3972049个)形状为8×8的子数组,无需填充,步长固定为1。

自定义实现

已编写以下自定义函数实现需求,但希望找到现成的高效方案:

function get_windows(img, window_size=8)
    X, Y = size(img)
    [img[i:i+window_size-1, j:j+window_size-1]
     for i in 1:X-window_size+1
     for j in 1:Y-window_size+1]
end

推荐的高效现成方案

使用Strided.jl包

Strided.jl提供了高效的滑动窗口实现,返回原始数据的视图而非复制数据,性能更优。

  1. 安装包:
using Pkg
Pkg.add("Strided")
  1. 提取滑动窗口:
using Strided

# 示例:生成2000×2000的灰度图像
img = rand(2000, 2000)

# 提取8×8滑动窗口,返回形状为(8,8,1993,1993)的四维视图
windows = slidingwindow(img, (8, 8))

# 若需要将窗口维度调整到最后(形状变为(1993,1993,8,8)),可使用permutedims
windows_reshaped = permutedims(windows, (3, 4, 1, 2))

该方案避免了内存复制,比自定义列表推导式更高效,尤其适合处理大尺寸图像。


内容的提问来源于stack exchange,提问作者Siddharth Yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:31:09