清除边缘检测算法中的噪声

时间:2010-05-04 19:23:45

标签: c++ theory noise edge-detection

我最近写了一个非常基本的边缘检测算法,它可以在一系列字符上运行。该程序旨在检测数组上单个特定值的blob的边缘,并通过简单地在数组元素上向左,向右,向上和向下查看并检查其中一个值是否与它的值不同来工作。目前正在关注。目标不是产生一条数学线,而是一组有序的点,代表一个被干扰的闭环边缘。

该算法工作得很好,除了我的数据包含一些噪声,因此会随机产生没有边缘的边缘。这反过来对我的其他一些程序造成了严重破坏。

数据包含两种类型的噪音。第一种类型相当稀疏,有些随机。第二种类型是x = y轴上的半连续直线。我知道第一类噪声的来源,它是数据的一个特征,我无能为力。至于第二种类型,我知道这是我的程序导致它的错误...虽然我没有一个热门线索究竟是什么导致它。

我的问题是: 我该如何完全消除噪音?

我知道正确的数据具有彼此相邻的点,并且非常紧凑和有序(没有间隙),并且是闭环或多个循环。第一种类型的噪声通常是稀疏和随机的,通过检查下一个噪声点是否也被计为边缘,可以很容易地处理。如果没有,则该点最具有噪音,应予以删除。

然而,第二种类型的噪声,我们有一个关于x = y的半连续线,这带来了更大的问题。该线有时是连续的随机长度(最长的是它在我的整个阵列的一半中未破坏)。它甚至可以与实际边缘相交。

关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:3)

通常在图像处理中使用中值滤波器。

你经常做一个扩张(使线条更大)而不是侵蚀(使线条更细)来封闭线条中的任何间隙

答案 1 :(得分:2)

噪声往往集中在较高频率,因此在进行边缘检测之前,请在图像上运行低通滤波器。我已经看到这个原理用于进行亚像素边缘检测。

答案 2 :(得分:0)

这是我将进入单元测试的那种东西。获取一些显示此问题的最小数据集(足够小,可以直接编码到测试文件中),运行测试,并使用小数据集直接查看正在进行的操作。