2011-12-23 320 views
5

我试图从图像中去除高斯噪声。我已经使用增加的噪声自己:如何从MATLAB中的图像中去除高斯噪声?

nImg = imnoise(img,'gaussian',0,0.01); 

我现在需要用自己的过滤器来消除噪声,或至少减少它。理论上,据我所知,使用ones(3)/9的卷积矩阵应该有所帮助,并且使用像[1 2 1; 2 4 2; 1 2 1]/9fspecial('gaussian',3)这样的高斯卷积矩阵应该更好。然而,他们真的没有这么做: enter image description here

我是否缺少重要的东西?顺便说一下,我需要使用卷积。

+3

平均滤波器(您的“one”滤波器)是一个糟糕的低通滤波器。高斯是一个更好的LPF。你在1 2 1变得失真的原因; 2 4 2; 1 2 1过滤器是因为它没有被正常化。 – 2011-12-23 18:43:35

+1

你对“1 2 1; 2 4 2; 1 2 1”是对的。我应该除以16而不是9。即使如此,它也不太好: [链接](http://img408.imageshack.us/img408/6176/resm.png) – shwartz 2011-12-24 10:32:15

回答

10

你不会错过任何东西! 很明显,你不能完全消除噪音。你可以尝试不同的过滤器,但所有的人都会有一个权衡:

更大的噪音及低模糊VS噪音少+更模糊

它成为你在想这更明显采用以下方法:

任何基于卷积的方法都假定所有邻居都具有相同的颜色。

但在现实生活中,图像中有很多物体。因此,当您应用卷积时,会通过混合来自不同相邻对象的像素导致模糊。

有更复杂的降噪方法,如:

  • 平均降噪
  • 双边滤波器
  • 模式匹配他们没有使用卷积的消噪

。顺便说一句,即使他们不能做魔术。

+0

谢谢。我已经在执行过程中看到了这种折衷,并且我也实现了中值去噪,这对于椒盐噪声非常有效,但对于高斯噪声并不那么重要。 但是,如何才能找到嘈杂而尖锐的图像与太模糊但噪点较小的图像之间的薄边界? 我有几个参数可以使用:矩阵维(小,大,方,矩形)和矩阵值(高斯,统一,其他一些奇怪的设置)。 那么,我真的没有什么像样的卷积吗? – shwartz 2011-12-24 10:38:04

+1

@shwartz,不幸的是,没有。您至少需要某种逻辑来检测边缘,拐角等,并会​​相应地对待它们。这不仅仅是**定义的卷积。 – 2011-12-24 11:51:39

+0

其实,这是令人鼓舞的,因为这项任务是使用卷积(完全按照我的理解)。唯一的问题是找到一个“好”的方法,以及如何知道哪个结果是最好的。有什么方法可以量化结果的质量吗?例如,与原始无噪声图像之间的某种矩阵距离是否可以很好地确定我的结果的质量?或者还有其他一些常见的方法吗? – shwartz 2011-12-24 15:14:29

0

你用高斯卷积矩阵犯了一个错误。你需要将它除以16而不是9,这样它的总和等于1.这就是为什么使用该矩阵的结果图像非常轻。

+0

谢谢,我知道。有人已在原始帖子下面发表评论。 – shwartz 2013-06-23 11:27:15

1

您可以使用wiener2当噪音是恒定功率(“白色”)添加 噪音,如高斯噪音时,效果最好。