2

考虑到我有一个这样的彩色图像其中轮廓不完整(线条之间有间隙)。我希望能够用一种或另一种颜色填充线条之间的区域。这实际上是我在相应灰度图像上应用精明边缘检测器后得到的二值图像。

我尝试先扩张图像然后侵蚀它,但结果还不够好。我希望能够保留根部的厚度

任何帮助将不胜感激

原始图像 原始图像

边缘检测和一些手动去除像素后的图像 边缘检测和一些手动去除像素后的图像

使用边缘图像中的信息,我想我会尝试从某种颜色的原始图像中提取像素。对于编辑图像中的每个白色像素,我在原始图像中沿同一水平线使用了一个搜索空间。我对 R、G 和 B 使用了不同的阈值,我最终得到了这个

使用原始图像和编辑图像中的像素信息

4

3 回答 3

1

我不确定您的原始图像是什么样的。看看会很有帮助。

线条之间有间隙,因为原始图像中的线条有两条边,每边一条。精明算法正在检测它们。Canny 边缘检测算法的核心是应用两个 Sobel 核来计算梯度,一个用于检测水平边缘,一个用于检测垂直边缘。

-1 0 +1
-2 0 +2
-1 0 +1

and

+1 +2 +1
 0  0  0
-1 -2 -1

这些内核将为线的两侧呈现峰值。一峰正一负。您可以通过排除相应的峰来排除线的一侧。在获取每个方向的梯度后,截断任何低于零的值(将值设置为零)以移除第二个峰值。然后像往常一样继续进行 Canny 边缘检测。这将导致每条线仅检测到一个边缘,而不是您现在看到的两个。

于 2013-05-07T04:37:59.767 回答
0

既然我已经看到了图像,我将添加第三种方法。看起来大部分信息都在绿色通道中。

绿色通道图像 绿色通道图像

如果您简单地应用阈值,此图像会给您一个不错的结果。具有某种任意阈值的阈值图像 阈值图像

然后,您可以自行清理此图像或使用边缘图像。要使用您生成的边缘图像对其进行清理,请删除与您检测到的边缘之一超过一定距离的任何白色像素(从边缘图像创建欧几里德距离图并使用它来设置任何大于一定距离的白色像素从边缘到黑色)。

如果您仍在收集图像,您可能需要尝试将相机放置在避开罐子底部(或其他任何东西)的位置。

于 2013-05-08T02:29:42.760 回答
0

您可以尝试使用线扫描方法。从侧面开始并水平扫描。当你碰到一个边缘时,你假设你在一个根中,你开始将体素设置为白色。当你击中另一个边缘时,你假设你正在离开一个根并开始。会有一些边缘情况,您可能需要添加额外的检查,例如限制允许的根部厚度。

你也可以做一个洪水填充风格的算法,你在根中取一个种子点,然后沿着根向上填充它。

不确定这些效果如何,因为它取决于图像,我没有测试它。

于 2013-05-07T17:57:05.753 回答