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

基于skimage的view_as_windows提取圆形二值图像滑动窗口

嘿,我来帮你把这段代码补全,同时结合你的圆形轮廓图像场景给点实用说明:

完整代码实现

首先把你未完成的代码补全,这里用原始字符串处理文件路径会更简洁(避免转义字符的麻烦):

from skimage.io import imread
from skimage.util import view_as_windows

# 原始字符串路径,无需转义反斜杠
fname = r"C:\Users\Username\Desktop\Circle.tif"
array = imread(fname)

# 定义滑动窗口尺寸和步长
window_shape = (50, 50)
step = 20

# 生成相邻重叠的子数组窗口
new_array = view_as_windows(array, window_shape, step)

# 查看生成的窗口数组结构:(窗口行数, 窗口列数, 窗口高度, 窗口宽度)
print(f"生成的窗口数组形状:{new_array.shape}")
针对你的图像场景的关键细节
  • 你的图像是250×250的8位二值圆形轮廓图(仅1像素宽轮廓),结合window_shape=(50,50)和step=20的设置,最终会生成11×11个窗口(计算逻辑:(250-50)//20 +1 =11),刚好完整覆盖整个原图,不会出现边缘遗漏。
  • 窗口之间存在30像素的重叠区域(50-20),这对你的1像素宽轮廓来说至关重要——能保证轮廓片段不会被窗口切割成完全孤立的部分,后续处理时更容易衔接分析。
  • 因为是二值图,每个窗口里的非零像素就是轮廓的片段,你可以基于这个特性做后续操作,比如统计轮廓像素数量、检测局部轮廓方向等。
后续窗口处理示例

比如遍历所有窗口,统计每个窗口内的轮廓像素数:

# 遍历所有滑动窗口
for row_idx in range(new_array.shape[0]):
    for col_idx in range(new_array.shape[1]):
        current_window = new_array[row_idx, col_idx]
        # 统计窗口中非零轮廓像素的数量
        contour_count = len(current_window[current_window != 0])
        print(f"位于({row_idx},{col_idx})的窗口,轮廓像素数:{contour_count}")

如果需要提取并查看某个特定窗口的图像,也可以直接索引:

# 获取第3行第4列的窗口(索引从0开始)
target_window = new_array[2, 3]
# 用matplotlib显示这个窗口
import matplotlib.pyplot as plt
plt.imshow(target_window, cmap='gray')
plt.show()

内容的提问来源于stack exchange,提问作者Johannes Schmidt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:08:30