发生这种情况的原因是因为您使用后的平均图像filter2是双类型图像。你不是第一个(也可能不是最后一个……)经历这种混淆的人imshow。事实上,我imshow在 StackOverflow 上解决的几乎所有问题都是因为与imshow.
在决定使用该功能之前,您必须了解您尝试显示的图像类型。imshow预计类型图像的double强度/颜色通道在[0,1]. 下面的任何内容0都设置为黑色,而超出的任何内容1都设置为白色,这就是您获得全白图像的原因。
您需要转换回以uint8正确显示图像。因此,请在显示图像之前尝试执行此操作:
down1 = uint8(down1);
imshow(down1);
当我这样做时,这就是我显示下采样图像时得到的结果。

小评论
FWIW,当涉及到图像过滤时,我会亲自使用imfilter。 imfilter专为图像过滤而设计,适用filter2于更通用的 2D 信号。一件好事是imfilter它会输出一个相同类型的图像,默认filter2为double. filter2除非您被迫在图像上使用它,否则我会远离。
因此,将您的filter2语法替换为:
avgimg = imfilter(img, avgfilter);
如果您改为这样做,则无需将图像转换回uint8. 您将能够使用 正确可视化结果imshow。