2012-02-07 54 views
3

以下是这种情况:
我使用Visual Studio 2008和.NET Framework 3.5。我正在使用C#。而对于我使用的数据库MySQL。我有pictureboxform和10-12 buttons(每个都有一些图像处理功能)。点击其中一个按钮openfiledialog框出现在用户可以选择提供给程序的特定文件的位置。在点击另一个按钮时,程序应按照下面的说明执行操作。

我有一个电路的图像。假设这是提供给程序的图像。例如
Circuit image
什么我打算做的是 - 该程序应该假设标记电路如下:
Labeling of the circuit
,然后它应该分离图像并存储在数据库中的信息。

有没有办法做到这一点。反正可以告诉我这样做的方法吗?请任何帮助或建议。图像的分离和分析

谢谢。

+0

图像是否总是干净清晰的1位黑白图像,并且所有终端都有类似于您的示例中的孔? (如果我们正在谈论真正的电路板,您可能也有SMD元件,这些元件不需要铜孔) – 2012-02-07 18:15:38

+0

一开始我只考虑简单电路。而且我也确保图像的清晰度。如果结果很好并且工作得到了令人满意的结果,那么我可能会遇到复杂的电路板以及与图像相关的其他复杂问题。 – OutOfBoundsException 2012-02-07 18:22:05

+0

昨天晚上我为了娱乐而拍了一张照片:http://virkkunen.net/js/circuit-labeler.html这很慢,因为它使用次优算法进行多次传递(从http:// .wikipedia.org/wiki/Connected-component_labeling),但它的作品。绝对有可能以精确的精度从通孔铜层中提取走线和端子! – 2012-02-09 20:31:43

回答

0

至少对于你的例子来说,一个非常简单的算法是可行的。

  1. 查找图像
  2. 使用洪水填充算法黑色像素,找到与它相连的所有像素,并分开了。这是你的痕迹之一。
  3. 使用分离的迹线,找到一个白色像素并使用填充填充算法来查找连接到它的所有像素。如果你跑到图像的边缘,这不是一个洞。如果你不这样做,它可能是一个漏洞,或者是一个循环。使用孔大小的阈值来确定它是端子孔还是回路。
  4. 标记洞并将其删除。重复,直到没有更多未处理的白色像素。
  5. 从考虑中删除整个轨迹,并跳转到1.
  6. 在步骤1中没有考虑到更多黑色像素时,就完成了。

你或许应该得到与有洪水填充功能的基本的图像编辑库很远,功能分离某种颜色到一个新的形象和功能,以取代颜色(最后两个都是微不足道以实施,并且在线有大量洪水填充算法)。您可以使用不同的颜色来标记不同的东西,例如,将所有“不考虑”颜色都标为红色。如果您实时查看它,它也会产生一个有趣的可视化效果!

+0

感谢您的帮助。 :)让我们看看我是否能够将它放入代码形式。 – OutOfBoundsException 2012-02-07 18:43:30

+2

@OutOfBoundsException:我很想试试看看它是否有效。 – 2012-02-07 18:52:49

3

在图像处理中,找到电路“零件”的问题被称为connected component labeling。如果您使用的是C#,我相信您可以使用EmguCV(OpenCV库的封装)来解决问题的第一部分。要做到这一点,你必须考虑白色像素是背景,黑色像素是物体。

现在你已经分开的痕迹,问题被简化为查找和标记白点。再次,您可以通过连接组件标签来解决它,但现在对象由白色像素表示,背景为黑色像素。

+0

“连接组件标签”算法肯定会比我建议的要少得多。 – 2012-02-07 20:04:37

+0

可能该算法与您建议的算法非常相似。 – 2012-02-07 20:10:14