在 MATLAB 中实现均值滤波器

Implementing mean filter in MATLAB

我已经通过在堆栈上搜索这里来完成这个问题,但我来这里是想问一下我以前所做的和现在所做的有什么区别。

所以我们有一个任务,我们应该实现一个均值滤波器,我的方法是首先将图像转换为 mxn 格式(x),然后创建某种顺序的过滤器矩阵 (h),例如3x3。然后我继续对 x 和 h 进行卷积以将滤镜应用于图像,但这没有用,我想知道原因。

评论中的代码是我实现但没有工作的代码,其余代码工作。顺便说一句,我在这里使用的图像是windows 7.

中的考拉图像
color = imread('Koala.jpg');
grey = rgb2gray(color);
figure
imshow(grey)
h = fspecial('average',5);
I = imfilter(grey, h);
figure
imshow(I)

% result = conv2(grey,h);
% figure
% imshow(result)

那么为什么 conv2 不起作用而 imfilter 起作用呢?作业的要求是对 hconv2 使用 fspecial 来实现过滤器,使用 conv2 方法我得到的只是一个带有黑色斑点的白色图像在某些时候。

出了什么问题?

您似乎将 uint8 类型的 grey 输入到 conv2,但您得到的是 double 类型的结果。结果图像中每个像素值的范围是 [0..255],当您 imshow 类型 double imshow 的图像期望像素值在 [0..255] 范围内时。 .1] 并因此使 1 处的像素饱和。由于 imshow 的这种行为,imshow(result) 的输出完全是白色的。 另一方面,imfilter 给你一个 uint8 类型的结果,而 imshow 对这种类型的像素强度没有问题。

你能做什么?

最简单的事情是告诉imshow检测像素值的适当范围:

imshow( result, [] );

另一个解决方案是使用 im2doublegrey 转换为 double,或者将结果转换为 uint8.