2016-01-20 117 views
0

我有一张图像,在执行预处理级别之后,我观察到有大量负值随机位于图像中。从图像中删除负值

有什么办法可以去除那些不是零的负值,而是通过MATLAB中的一些平均操作?

要求:应用该操作后,我的图像不应该高度失真。

+0

请张贴一些代码与您的图片 –

+0

我认为如果您有负值,那么您的图像已经失真。 –

+0

改进格式 – davejal

回答

4

首先:如评论中所示,试着找出为什么你有负面的价值。然后决定,如果你想要这些值。如果是:将图像重新缩放至[0,1]。如果您仍然想要移除这些像素并按照某个平均值取代它们,请按照您在问题中提出的建议,这里有一个方法:

这样的噪音称为“盐椒&胡椒噪音”。这个有趣的名字的原因很明显,一旦你看到它的图像:在图像上有白色(像素= 1)和黑色(像素= 0)点,看起来像盐和胡椒粒。

Salt & Pepper Noise

在你的情况,如果我们假定负值是零,你只有图像中的椒盐噪声。为了解决这个问题,我们准备一些数据:我们读取摄影师图像并将其转换为双倍(以允许负值)。然后我们随机地将所有像素的1%反转,所以它们是负的。

im = im2double(imread('cameraman.tif')); 
randmask = rand(size(im)) < 0.01; 
distIm = im - 2*randmask.*im; 

一种简单和有效的方式来过滤盐&椒盐噪声, 是使用中值滤波器(medfilt2),其 具有限定附近,例如中位值替换各像素的图像中3×3。这个过滤器是你对抗椒盐噪音的标准武器之一。

medfilt2(distIm); 

你甚至可以选择哪些是小于零的像素,过滤器只适用于这些,使用roifilt2功能。这样,你不碰“正确的”像素:

filtIm = roifilt2(distIm, distIm<0, @medfilt2); 

result

看起来不那么糟糕,不是吗?但请注意:如果您有大面积的负像素,那么效果不佳,因为这个邻域的中位数仍然是负值。

+0

非常感谢您提供这个有效的插图。再一次感谢你。我可以从中学到很多东西。 – Roma