在 MatLab 中过滤噪声

Posted

技术标签:

【中文标题】在 MatLab 中过滤噪声【英文标题】:Filter Noise in MatLab 【发布时间】:2012-09-18 17:11:41 【问题描述】:

您好,我正在尝试使用 MatLab 过滤包含 4 个对象的图像。我的第一张图像有一个黑色背景和白色物体,所以我很清楚通过使用 BW 标签找到这些大的白色部分并将它们与图像分离来过滤掉每个图像。

不过,下一张图片中有噪点。现在我有一张白线穿过我的对象的图像,它们现在实际上是相互连接的。如何在 MatLab 中过滤掉这些行?椒盐噪声怎么样?是否有 MatLab 函数可以做到这一点?

【问题讨论】:

你能发布一个链接到你的输入图像吗?我想看看噪音是什么样子的。 【参考方案1】:

可以通过多种方式过滤噪音。典型的噪声过滤过程将类似于阈值>中值过滤>模糊>阈值。然而,关于噪声类型的信息对于适当的噪声过滤可能非常重要。例如,由于图像中有线条,您可以尝试使用Hough transform 来检测它们并将它们从游戏中移除(或houghlines)。另一种方法是实现RANSAC。对于椒盐类噪声,应使用medfilt2,并使用适当的窗口大小来捕捉噪声特征(例如,3x3 窗口可以很好地处理 1 像素大的噪声波动......)。

【讨论】:

【参考方案2】:

如果您可以忍受稍微扭曲对象,您可以使用带有一点对比度拉伸的closing (morphological) filter。您将需要图像处理工具箱,但这是大体思路。

模糊以消除线条,否则关闭过滤器将删除您的对象。您可以使用 fspecial 创建高斯过滤器并使用 imfilter 应用它 使用 imclose 对图像应用关闭滤镜,遮罩比您的噪点大,但比对象块小(我在示例中使用了 3x3 菱形)。 使用 im2bw 对图像设置阈值,以便每个像素都变成纯黑色或纯白色

我附上了一个我必须为学校项目做的例子。在我的例子中,背景是白色的,物体是黑色的,我在腐蚀和膨胀之间伸展。侵蚀后你看不到灰色,但它就在那里(因此有必要进行阈值处理)。

您当然可以直接进行关闭(腐蚀后膨胀)然后阈值。请注意此过滤如何扭曲对象。

仅供参考,通常使用移动平均滤波器清除椒盐噪声,但这会留下图像灰度。对于我的项目,我需要一个纯黑白(用于 BW 标签),并且形态过滤器可以很好地完全消除噪音。

【讨论】:

以上是关于在 MatLab 中过滤噪声的主要内容,如果未能解决你的问题,请参考以下文章

用matlab给图像加高斯噪声和椒盐噪声(不调用imnoise函数)

matlab数组中怎么加入高斯白噪声

matlab在空域与频域中去除周期噪声椒盐噪声的简单应用

如何用matlab产生标准高斯噪声

matlab 产生白噪声

matlab中怎么产生高斯白噪声