基于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
相关产品推荐
相关产品推荐

