我有一个图像,在执行一定程度的预处理后,我发现有大量的负值随机地位于图像中。
有没有办法去除那些不是零的负值,而是通过MATLAB中的一些平均操作来删除?
要求:应用此操作后,我的图像不应高度失真。
答案 0 :(得分:4)
首先:根据评论中的建议,尝试找出为什么您有负值。然后决定,如果你想要这些值。如果是:将图像重新缩放为[0,1]
。如果您仍想删除这些像素并按平均值替换它们,正如您在问题中所建议的那样,这是一种方式:
这种噪音被称为" Salt&辣椒噪音"。这个有趣的名字的原因是显而易见的,一旦你看到它的图像:整个图像上有白色(像素= 1)和黑色(像素= 0)点,看起来像盐和胡椒粒。
在您的情况下,如果我们假设负值为零,则您只会在图像中出现胡椒噪音。
要解决这个问题,让我们准备一些数据:我们读取摄像师图像并将其转换为双倍(以允许负值)。然后我们随机反转所有像素的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);
看起来不那么糟糕,是吗?但要注意:如果你有大的负像素区域,那么这项工作就不会很好,因为这个社区的中位数仍然是负数。
答案 1 :(得分:0)
如果您使用uint8
将图片转换为im2uint8(I)
,您的图片将会缩放。