从图像中删除负值

时间:2016-01-20 14:04:40

标签: image matlab image-processing matrix

我有一个图像,在执行一定程度的预处理后,我发现有大量的负值随机地位于图像中。

有没有办法去除那些不是零的负值,而是通过MATLAB中的一些平均操作来删除?

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

2 个答案:

答案 0 :(得分:4)

首先:根据评论中的建议,尝试找出为什么您有负值。然后决定,如果你想要这些值。如果是:将图像重新缩放为[0,1]。如果您仍想删除这些像素并按平均值替换它们,正如您在问题中所建议的那样,这是一种方式:

这种噪音被称为" Salt&辣椒噪音"。这个有趣的名字的原因是显而易见的,一旦你看到它的图像:整个图像上有白色(像素= 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功能仅将滤镜应用于这些像素。那样你就不会碰到&#34;正确的&#34;像素:

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

result

看起来不那么糟糕,是吗?但要注意:如果你有大的负像素区域,那么这项工作就不会很好,因为这个社区的中位数仍然是负数。

答案 1 :(得分:0)

如果您使用uint8将图片转换为im2uint8(I),您的图片将会缩放。