在MatLab中滤除噪声

3

你好,我正在尝试使用MatLab对包含4个物体的图像进行滤波处理。我的第一张图片有黑色背景和白色物体,所以很容易通过使用BW Label来找到这些大的白色区域并将它们从图片中分离出来。

然而,接下来的图片却有噪点。现在我的物体上有白色线条,并且它们实际上是相互连接的。在MatLab中如何过滤掉这些线条呢?那么盐和胡椒噪声呢?是否有MatLab函数可以实现这个功能呢?


你能发一下你的输入图像链接吗?我想看看噪声长什么样子。 - Yamaneko
2个回答

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

1

如果您可以接受稍微扭曲一下对象,您可以使用带有一点对比度拉伸的闭合(形态)滤波器。您需要图像处理工具箱,但这是一般的想法。

  • 模糊以消除线条,否则闭合滤波器将擦除您的对象。您可以使用fspecial创建高斯滤波器,然后使用imfilter应用它
  • 使用比噪声大但比对象小的掩码(我在示例中使用了3x3菱形)使用imclose对图像进行闭合滤波。
  • 使用im2bw对图像进行阈值处理,使每个像素都变成纯黑色或纯白色

我附上了一个我为学校项目做的示例。在我的情况下,背景是白色的,对象是黑色的,我在腐蚀和膨胀之间拉伸了一下。您实际上看不到腐蚀后的灰色,但它确实存在(因此需要阈值处理)。

当然,您也可以直接进行闭合(腐蚀后跟随膨胀),然后进行阈值处理。请注意,此过滤会扭曲对象。

通常情况下,盐和胡椒噪声可以通过移动平均滤波器进行清除,但这会使图像变为灰度。对于我的项目,我需要纯黑白图像(用于BW标签),形态学滤波器非常适合完全消除噪声。

Morphological Filtering Example


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接