0

我使用平均操作执行了图像下采样。图像被分成 2 x 2 块,然后进行 4 次下采样。下采样图像的新像素值替换为每个块的平均值,如下所示:

img = imread('cameraman.tif');
avgfilter = fspecial('average', [2 2]);
avgimg = filter2(avgfilter, img);
down1 = avgimg(1:2:end,1:2:end);
imshow(down1);

我使用灰度图像作为输入。但是,我得到一个完整的白色图像作为下采样的输出。为什么会这样?请帮忙。

4

1 回答 1

3

发生这种情况的原因是因为您使用后的平均图像filter2类型图像。你不是第一个(也可能不是最后一个……)经历这种混淆的人imshow。事实上,我imshow在 StackOverflow 上解决的几乎所有问题都是因为与imshow.

在决定使用该功能之前,您必须了解您尝试显示的图像类型。imshow预计类型图像的double强度/颜色通道在[0,1]. 下面的任何内容0都设置为黑色,而超出的任何内容1都设置为白色,这就是您获得全白图像的原因。

您需要转换回以uint8正确显示图像。因此,请在显示图像之前尝试执行此操作:

down1 = uint8(down1);
imshow(down1);

当我这样做时,这就是我显示下采样图像时得到的结果。

在此处输入图像描述


小评论

FWIW,当涉及到图像过滤时,我会亲自使用imfilterimfilter专为图像过滤而设计,适用filter2于更通用的 2D 信号。一件好事是imfilter它会输出一个相同类型的图像,默认filter2double. filter2除非您被迫在图像上使用它,否则我会远离。

因此,将您的filter2语法替换为:

avgimg = imfilter(img, avgfilter);

如果您改为这样做,则无需将图像转换回uint8. 您将能够使用 正确可视化结果imshow

于 2014-10-04T04:32:45.333 回答