1

我最近写了一个非常基本的边缘检测算法,它适用于一个字符数组。该程序旨在检测数组上单个特定值的 blob 的边缘,并通过简单地查看数组元素的左、右、上和下并检查其中一个值是否与它的值不同来工作目前在看。目标不是产生一条数学线,而是一组有序的点,代表一个描述的闭环边缘。

该算法工作得非常好,除了我的数据包含一点噪音,因此会随机产生不应该有边缘的边缘。这反过来又对我以后的一些其他程序造成了严重破坏。

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

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

我知道正确的数据具有始终相邻的点,并且非常紧凑且有序(没有间隙)并且是闭环或多环。第一类噪声通常是稀疏和随机的,可以通过检查是否有任何边缘紧邻噪声点也被视为边缘来轻松处理。如果不是,那么这个点就是最明显的噪音,应该被删除。

然而,第二种类型的噪声,即我们有一条关于 x=y 的半连续线会带来更多问题。这条线有时对于随机长度是连续的(最长的是它在我的整个数组中连续穿过一半)。它甚至有可能与实际边缘相交。

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

4

3 回答 3

3

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

您还经常做扩张(使线条变大)而不是侵蚀(使线条变细)以闭合线条中的任何间隙

于 2010-05-04T19:27:44.900 回答
2

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

于 2010-05-04T19:36:59.030 回答
0

这就是我将投入到单元测试中的东西。获取一些显示此问题的最小数据集(足够小,可以直接编码到测试文件中),运行测试,然后使用小数据集逐步查看发生了什么。

于 2010-05-04T19:30:54.923 回答