matlab中的中值滤波器与伪中值滤波器

时间:2011-07-11 17:32:25

标签: matlab filtering median

任何人都知道为什么伪中值滤波器比中值滤波器更快? 我使用medfilt2.m进行中值滤波,我实现了自己的伪中值滤波器:

b = strel('square',3);
psmedIm = (0.5*imclose(noisedIm,b)) + (0.5*imopen(noisedIm,b));

其中b是方形平面结构元素,noisedIm是由盐和胡椒噪声引起的图像。

另外,我不明白为什么使用伪媒体滤波器生成的图像没有去噪。

谢谢!

1 个答案:

答案 0 :(得分:4)

就你的速度查询而言,我建议你的假媒体过滤器更快,因为它不涉及排序。真正的中值过滤器要求您对元素进行排序并找到中心值,这需要相当长的时间。

为什么你的盐和胡椒噪音没有被删除的原因是你总是保持它们的效果,因为当你使用imclose和{时,你总是在结构元素中使用最小值和最大值。 {1}}。因为你只是将每一个加权一半,如果有一个白色像素,imopen函数的0.5因子贡献会使像素值上升,反之亦然,黑色像素。

编辑:这是我做的一个快速演示,可以帮助你的假媒体用盐和胡椒噪音表现得更好。最大的区别在于它试图使用打开和关闭图像的“最佳部分”,而不是让它们对抗它。我认为它可以很好地消除您用作例子的盐和胡椒噪音。

max

编辑:以下是运行代码的结果:

Salt and pepper noise reduction

编辑2:这是基础理论(它不是过于数学化,完全基于直觉!)

随着纯白色和纯黑色像素随机散射,存在盐和胡椒噪声。我们的想法是,“封闭”和“打开”的图像将各自消除一半的 - 白盐噪声或黑胡椒噪声 - 并且该位置的像素值应为由其中一个操作纠正。我们只是不知道哪一个。因此我们知道,对于该像素,“闭合”和“打开”两个图像中的一个是“正确的”,因为该操作应该有效地“正中”编辑该像素。由于“不正确”的值应该与原始图像在该像素(白色或黑色)上具有完全相同的值,因此减去其值不会影响原始图像。只有“正确”的一个(与将图像返回到其所谓的正确值所需的确切数量不同)是正确的,因此我们将该像素处的图像调整相应的量。因此,拍摄嘈杂的原始图像并添加它们两者之间的差异会让我们减少噪音。