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

如何解决patchify报错ValueError: `window_shape` is incompatible with `arr_in.shape`

问题原因分析

这个报错的核心是你传入patchify函数的待切分图像的维度,和你指定的切分patch的维度/大小不匹配,常见有两个诱因:

  • 你的tif图像读取后带额外的通道维度:你当前指定的patch尺寸是(256,256),仅适配二维单通道图像,但如果你读取的large_image实际是三维数组(比如格式为(高度, 宽度, 通道数)的RGB图/带通道轴的单通道图),维度数量不匹配就会触发报错。
  • 你的原图宽高不是256的整数倍:你设置了patch尺寸和步长都是256,要求原图的高度和宽度都能被256整除,否则最后剩下的不足256的部分无法完成无重叠切分。
解决方案

第一步:确认图像维度

在提取单张图像后先加一行打印代码,确认数组形状:

large_image = large_image_stack[img]
print(large_image.shape) # 新增此行查看输出

第二步:对应场景修正

场景1:图像带通道维度

如果打印结果是类似(1024, 1024, 3)的三通道RGB格式,或(1024, 1024, 1)的带多余通道轴的单通道格式,两种修正方式二选一即可:

  • 调整patch尺寸匹配维度:3通道图把patchify参数改为patchify(large_image, (256, 256, 3), step=256);带多余通道的单通道图改为patchify(large_image, (256, 256, 1), step=256)
  • 提前去除多余维度:单通道图可先执行large_image = np.squeeze(large_image)去掉长度为1的通道轴,再沿用原来的(256,256)参数即可。

场景2:图像宽高不是256的整数倍

先对原图做边缘填充,把宽高补到256的最小整数倍再切分,单通道图像填充示例:

h, w = large_image.shape
# 计算需要填充的像素数,刚好整除时填充量为0
pad_h = (256 - h % 256) % 256
pad_w = (256 - w % 256) % 256
# 默认用0填充边缘,可根据需求修改mode参数调整填充规则
large_image = np.pad(large_image, ((0, pad_h), (0, pad_w)), mode='constant')

带通道的三维图像填充参数对应调整即可:

h, w, c = large_image.shape
pad_h = (256 - h % 256) % 256
pad_w = (256 - w % 256) % 256
large_image = np.pad(large_image, ((0, pad_h), (0, pad_w), (0,0)), mode='constant')

掩码的处理逻辑和原图完全一致,按照同样的规则调整即可。

内容的提问来源于stack exchange,提问作者keshari abeysinghe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:09:01