任何人都知道为什么伪中值滤波器比中值滤波器快吗?我用于medfilt2.m
中值滤波,并实现了自己的伪中值滤波器,即:
b = strel('square',3);
psmedIm = (0.5*imclose(noisedIm,b)) + (0.5*imopen(noisedIm,b));
其中 b 是方形平面结构元素,noisedIm 是由椒盐噪声干扰的图像。
另外我不明白为什么使用伪中值滤波器生成的图像没有去噪。
谢谢!
就您的速度查询而言,我建议您的伪中值过滤器更快,因为它不涉及排序。真正的中值过滤器要求您对元素进行排序并找到中心值,这需要相当长的时间。
你的椒盐噪声没有被移除的原因是你总是保持它们的效果,因为当你使用imclose
and时你总是在结构元素中同时使用最小值和最大值imopen
。因为您只是将每个权重减半,所以如果有一个白色像素,则该max
函数的 0.5 因子贡献将提高像素值,反之亦然。
编辑:这是我做的一个快速演示,它可以帮助你的伪中位数在椒盐噪声下表现得更好一些。最大的区别在于它试图使用打开和关闭图像的“最佳部分”,而不是让它们与之抗衡。我认为它可以很好地消除您用作示例的椒盐噪声。
img = imread('cameraman.tif');
img = imnoise(img, 'salt & pepper', 0.01);
subplot(2,2,1); imshow(img);
b = strel('square', 3);
closed = double(imclose(img, b));
opened = double(imopen(img, b));
subplot(2,2,2); imshow(closed,[]);
subplot(2,2,3); imshow(opened,[]);
img = double(img);
img = img + (closed - img) + (opened - img);
subplot(2,2,4); imshow(img,[]);
编辑:这是运行代码的结果:
编辑2:这是基本理论(它不是过于数学化并且完全基于直觉!)
椒盐噪声以随机散布的纯白色和纯黑色像素形式存在。这个想法是,“关闭”和“打开”图像将各自消除一半——无论是白盐噪声还是黑胡椒噪声——并且该位置的像素值应通过其中一项操作进行校正。我们只是不知道是哪一个。所以我们知道一个“关闭”和“打开”图像中的图像对于该像素是“正确的”,因为该操作应该有效地正确“中值”该像素。由于“不正确”的像素在该像素(白色或黑色)处应具有与原始图像完全相同的值,因此减去其值不会影响原始图像。只有“正确”的那个(其差异在于将图像返回到其所谓的正确值所需的确切数量)是正确的,因此我们将该像素处的图像调整相应的数量。因此,获取嘈杂的原始图像并将两者都添加到其中,可以为我们提供一些减少了很多噪声的东西。