有人知道为什么伪中位数滤波器比中值滤波器快吗?
我使用了medfilt2.m
进行中值滤波,并实现了自己的伪中位数滤波器,其代码如下:
b = strel('square',3);
psmedIm = (0.5*imclose(noisedIm,b)) + (0.5*imopen(noisedIm,b));
其中b是一个正方形的平面结构元素,noisedIm是一张被椒盐噪声污染的图像。
另外我不明白为什么使用伪中值滤波器生成的图像没有去噪。
谢谢!
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: 这是其基本原理(它并不过于数学化,完全基于直觉!)
盐和胡椒噪声作为纯白色和纯黑色像素随机散布存在。想法是“关闭”和“打开”的图像将分别消除其中的一半--白色盐噪声或黑色胡椒噪声--该位置的像素值应通过其中一个操作进行更正。我们只是不知道哪个操作。因此,我们知道“关闭”和“打开”中的其中一个图像在该像素的正确设置上是“正确”的,因为操作应该已经正确地对该像素进行了“中位数”处理。由于“不正确”的那一个在该像素处应该与原始图像具有完全相同的值(白色或黑色),所以减去其值不会影响原始图像。只有“正确”的那个(其差值恰好等于将图像返回到其所谓的正确值所需的量)是正确的,因此我们通过相应的量调整该像素处的图像。因此,将嘈杂的原始图像添加到其中两者之间的差异,可以使得图像的噪声大大减少。