【问题标题】:Implementing mean filter in MATLAB在 MATLAB 中实现均值滤波器
【发布时间】:2015-07-12 20:47:49
【问题描述】:

我已经通过在堆栈上搜索完成了这个问题,但我在这里问我以前所做的和我现在所做的工作之间有什么区别。

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

cmets 中的代码是我实现但没有工作的代码,其余代码工作。顺便说一句,我这里使用的图像是 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 起作用?作业的要求是使用fspecial 和h 和conv2 来实现过滤器,使用conv2 方法,我得到的只是在某些点上带有黑色斑点的白色图像。

【问题讨论】:

    标签: matlab image-processing filtering


    【解决方案1】:

    出了什么问题?

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

    你能做什么?

    最简单的方法是告诉imshow 检测像素值的正确范围:

    imshow( result, [] );
    

    另一种解决方案是使用im2double 将grey 转换为double,或者将结果转换为uint8。

    【讨论】:

    • 谢谢你的工作..但是你能告诉我括号[]在imshow的地图参数中表示什么吗??
    • 阅读imshow 尤其是'DisplayRange' 上的部分。 @哈米姆
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多