连接组件标记算法在某些情况下失败
Connected-Component-Labeling-Algorithm fails in some cases
我用过这个算法
http://www.codeproject.com/Articles/336915/Connected-Component-Labeling-Algorithm
清除图像中的噪声。
这是原始噪音
这是我得到的:
最终图像周围仍有噪点。
有谁知道算法在哪里失败或可以推荐更有效的算法?
谢谢
提到的算法没有提到噪声清除。该算法将不同的连续区域分开。
您已决定使用查找和分离主要印迹的算法。为什么不。但看起来,你也发现了几个紧密的小污点。实际上,您的 prog 似乎将 2 像素距离作为 1 像素实例。原因可能是:
- 代码错误 - 但我很难想象会导致这样的图片的错误。只有当你使用一些额外的算法来加速这个过程时。或者,如果您通过简单地为 x、y 的不同组合寻找 +1、-1 来寻找邻居(糟糕的方式!),您可以改为写 2。
- 这些小斑点实际上是通过细小的像素序列连接到主要斑点的,在您用来显示图片的比例中是看不见的。真的是1:1图吗?
ImageMagick 用最少的努力就做得很好。它无论如何都安装在大多数 Linux 发行版上,并且可用于 OSX 和 Windows。 运行 从命令行像这样:
convert input.png \
-colorspace gray -negate -threshold 10% \
-define connected-components:verbose=true \
-define connected-components:area-threshold=800 \
-connected-components 8 -auto-level output.png
输出
Objects (id: bounding-box centroid area mean-color):
0: 431x424+0+0 209.2,207.5 135697 srgb(13,13,13)
109: 236x273+120+84 231.7,223.0 47047 srgb(255,255,255)
如果您将阈值更改为仅显示面积大于(比如 50)的斑点,您将得到:
Objects (id: bounding-box centroid area mean-color):
0: 431x424+0+0 210.2,208.5 134262 srgb(11,11,11)
109: 236x273+120+84 231.7,223.0 47047 srgb(255,255,255)
1: 40x20+1+1 16.9,9.5 605 srgb(255,255,255)
190: 12x15+309+153 314.2,160.1 126 srgb(253,253,253)
83: 12x13+142+71 148.1,76.7 90 srgb(255,255,255)
164: 12x17+140+132 146.0,140.1 90 srgb(255,255,255)
347: 10x12+50+304 54.5,309.6 85 srgb(255,255,255)
440: 11x11+278+399 282.6,404.2 79 srgb(255,255,255)
448: 6x15+425+403 427.9,409.9 71 srgb(255,255,255)
151: 9x11+145+122 149.2,126.4 68 srgb(255,255,255)
93: 11x9+105+75 110.1,79.6 61 srgb(255,255,255)
170: 9x10+91+136 95.1,140.8 58 srgb(255,255,255)
258: 9x10+107+220 110.8,225.1 52 srgb(255,255,255)
53: 10x8+64+47 68.5,50.2 50 srgb(255,255,255)
或者,如果你想要一些 C 代码,你可以看看我的 这个问题:
我用过这个算法
http://www.codeproject.com/Articles/336915/Connected-Component-Labeling-Algorithm
清除图像中的噪声。
这是原始噪音
这是我得到的:
最终图像周围仍有噪点。 有谁知道算法在哪里失败或可以推荐更有效的算法? 谢谢
提到的算法没有提到噪声清除。该算法将不同的连续区域分开。
您已决定使用查找和分离主要印迹的算法。为什么不。但看起来,你也发现了几个紧密的小污点。实际上,您的 prog 似乎将 2 像素距离作为 1 像素实例。原因可能是:
- 代码错误 - 但我很难想象会导致这样的图片的错误。只有当你使用一些额外的算法来加速这个过程时。或者,如果您通过简单地为 x、y 的不同组合寻找 +1、-1 来寻找邻居(糟糕的方式!),您可以改为写 2。
- 这些小斑点实际上是通过细小的像素序列连接到主要斑点的,在您用来显示图片的比例中是看不见的。真的是1:1图吗?
ImageMagick 用最少的努力就做得很好。它无论如何都安装在大多数 Linux 发行版上,并且可用于 OSX 和 Windows。 运行 从命令行像这样:
convert input.png \
-colorspace gray -negate -threshold 10% \
-define connected-components:verbose=true \
-define connected-components:area-threshold=800 \
-connected-components 8 -auto-level output.png
输出
Objects (id: bounding-box centroid area mean-color):
0: 431x424+0+0 209.2,207.5 135697 srgb(13,13,13)
109: 236x273+120+84 231.7,223.0 47047 srgb(255,255,255)
如果您将阈值更改为仅显示面积大于(比如 50)的斑点,您将得到:
Objects (id: bounding-box centroid area mean-color):
0: 431x424+0+0 210.2,208.5 134262 srgb(11,11,11)
109: 236x273+120+84 231.7,223.0 47047 srgb(255,255,255)
1: 40x20+1+1 16.9,9.5 605 srgb(255,255,255)
190: 12x15+309+153 314.2,160.1 126 srgb(253,253,253)
83: 12x13+142+71 148.1,76.7 90 srgb(255,255,255)
164: 12x17+140+132 146.0,140.1 90 srgb(255,255,255)
347: 10x12+50+304 54.5,309.6 85 srgb(255,255,255)
440: 11x11+278+399 282.6,404.2 79 srgb(255,255,255)
448: 6x15+425+403 427.9,409.9 71 srgb(255,255,255)
151: 9x11+145+122 149.2,126.4 68 srgb(255,255,255)
93: 11x9+105+75 110.1,79.6 61 srgb(255,255,255)
170: 9x10+91+136 95.1,140.8 58 srgb(255,255,255)
258: 9x10+107+220 110.8,225.1 52 srgb(255,255,255)
53: 10x8+64+47 68.5,50.2 50 srgb(255,255,255)
或者,如果你想要一些 C 代码,你可以看看我的