如何从 MATLAB 中的图像中去除高斯噪声?
Posted
技术标签:
【中文标题】如何从 MATLAB 中的图像中去除高斯噪声?【英文标题】:How to remove gaussian noise from an image in MATLAB? 【发布时间】:2012-01-26 23:54:48 【问题描述】:我正在尝试从图像中去除高斯噪声。我自己添加了噪音:
nImg = imnoise(img,'gaussian',0,0.01);
我现在需要使用我自己的过滤器去除噪音,或者至少减少它。理论上,据我了解,使用ones(3)/9
的卷积矩阵应该会有所帮助,而使用像[1 2 1; 2 4 2; 1 2 1]/9
或fspecial('gaussian',3)
这样的高斯卷积矩阵应该会更好。然而,他们真的做得不太好:
我错过了什么重要的东西吗?顺便说一下,我需要使用卷积。
【问题讨论】:
平均滤波器(你的“ones”滤波器)是一个糟糕的低通滤波器。高斯是更好的 LPF。 1 2 1 失真的原因; 2 4 2; 1 2 1 过滤器是因为它没有正确归一化。 您对1 2 1;2 4 2;1 2 1
的看法是正确的。我应该除以 16 而不是 9。即便如此,它也不能很好地工作:link
【参考方案1】:
你没有错过任何东西! 显然,您无法完全消除噪音。您可以尝试不同的过滤器,但它们都需要权衡:
更多噪点 + 更少模糊 VS 更少噪点 + 更多模糊
如果您以以下方式考虑这一点,就会变得更加明显:
任何基于卷积的方法都假定所有邻居都具有相同的颜色。
但在现实生活中,图像中有很多物体。因此,当您应用卷积时,您会通过混合来自不同相邻对象的像素来导致模糊。
还有更复杂的去噪方法,例如:
中值去噪 双边过滤器 基于模式匹配的去噪他们没有使用only卷积。顺便说一句,即使他们不会魔法。
【讨论】:
谢谢。我已经在实现过程中看到了这种权衡,并且我还实现了中值去噪,它对椒盐噪声非常有效,但对高斯噪声却没有那么大。尽管如此,我如何才能找到一张过于嘈杂但清晰的图像和一张过于模糊但有一点噪点的图像之间的细界限?我有一些参数可以使用:矩阵尺寸(小、大、正方形、矩形)和矩阵值(高斯、均匀、其他一些奇怪的设置)。那么,我真的不能用卷积做任何像样的事情吗? @shwartz,不幸的是,不是。您至少需要某种逻辑来检测边缘、角落等并相应地处理它们。根据定义,这不是仅卷积。 实际上,这有点令人鼓舞,因为任务是使用卷积(仅据我所知)。唯一的问题是找到一个“好”的方法以及如何知道哪个结果是最好的。有没有办法量化结果的质量?例如,与原始无噪声图像的某种矩阵距离是否是确定结果质量的好方法?还是有其他常用的方法? 我建议你再问一个关于这个主题的问题 :) 你可以放一个链接到这个。 @Andrey 我对你所说的很感兴趣......我应该在堆栈交换上一起问一个新问题吗?我想了解的是消除噪音之间的权衡,但不消除边缘......也许是其中一些技术的总结。 (例如,我遇到过“各向异性扩散”)......这些是如何工作的?正在改变什么?谢谢。【参考方案2】:您可以使用wiener2
,它在噪声为恒定功率(“白色”)加性时效果最佳
噪声,例如高斯噪声。
【讨论】:
【参考方案3】:您在使用高斯卷积矩阵时犯了一个错误。您需要将它除以 16,而不是 9,这样总和就等于 1。这就是使用该矩阵生成的图像如此轻巧的原因。
【讨论】:
谢谢,我知道了。有人已经在原帖下方发表了评论。以上是关于如何从 MATLAB 中的图像中去除高斯噪声?的主要内容,如果未能解决你的问题,请参考以下文章
现有一含有椒盐噪声的图像image.jpg如何增强该图像,写出matlab程序
图像去噪基于matlab改进非局部均值红外图像混合噪声含Matlab源码 1640期