C# 图像的分离与分析

C# 图像的分离与分析,c#,windows,visual-studio-2008,image-processing,C#,Windows,Visual Studio 2008,Image Processing,以下是场景: 我正在使用Visual Studio 2008和.NET framework 3.5。我用的是C语言,数据库用的是MySQL。我在表单上有一个picturebox和10-12个按钮,每个按钮都有一些图像处理功能。单击其中一个按钮,将显示OpenFile对话框,用户可以在其中选择要提供给程序的特定文件。单击另一个按钮时,程序应执行如下所述的操作。 我有一张电路图。假设这是提供给程序的图像。例如 我打算做的是-程序应该假设电路标签如下: 然后它应该分离图像并将信息存储在数据库中。 有没

以下是场景: 我正在使用Visual Studio 2008和.NET framework 3.5。我用的是C语言,数据库用的是MySQL。我在表单上有一个picturebox和10-12个按钮,每个按钮都有一些图像处理功能。单击其中一个按钮,将显示OpenFile对话框,用户可以在其中选择要提供给程序的特定文件。单击另一个按钮时,程序应执行如下所述的操作。 我有一张电路图。假设这是提供给程序的图像。例如 我打算做的是-程序应该假设电路标签如下: 然后它应该分离图像并将信息存储在数据库中。 有没有办法做到这一点。你能告诉我怎么做吗?请提供任何帮助或建议


谢谢。

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

从图像中查找黑色像素 使用泛光填充算法,找到连接到它的所有像素,并将其分离。那是你的痕迹之一。 使用分离的轨迹,找到一个白色像素,并使用泛光填充算法找到与之连接的所有像素。如果你跑到图像的边缘,它不是一个洞。如果没有,则可能是轨迹中的一个孔或一个循环。使用孔尺寸的阈值来确定它是端子孔还是回路。 给孔贴上标签,并将其从考虑范围中移除。重复此操作,直到不再有未处理的白色像素。 从考虑中删除整个跟踪,然后跳到1。 当在步骤1中不再考虑黑色像素时,就完成了。
基本的图像编辑库有一个泛光填充函数,一个将特定颜色分离为新图像的函数,以及一个替换颜色的函数,这两个函数实现起来很简单,而且在线上有很多泛光填充算法。您可以使用不同的颜色来标记不同的东西,例如,将所有未考虑的东西都涂成红色。如果您实时查看它,它也会产生有趣的可视化效果

在图像处理中,查找电路“部分”的问题称为。如果您使用的是C,我相信您可以使用OpenCV库的包装器来解决问题的第一部分。要做到这一点,你必须考虑到白色像素是背景,黑色像素是对象。
既然有了分离的痕迹,问题就简化为找到并标记白点。同样,您可以通过连接组件标签来解决此问题,但现在对象由白色像素表示,背景为黑色像素。

图像是否总是干净清晰的1位黑白图像,以及是否所有端子都像您的示例中那样有孔?如果我们说的是真正的电路板,你可能也有SMD组件,它们不需要在铜板上打洞。一开始我只考虑简单的电路。我也在确保图像的清晰度。如果结果是好的,并且能给出一些令人满意的结果,那么我可能会选择复杂的电路板和其他与图像相关的复杂性。昨天晚上我试着这么做是为了好玩:它非常慢,因为它使用从中偷来的次优算法进行多次传递,但它有点工作。绝对有可能以相当高的精度从通孔铜层中提取迹线和端子!谢谢你的帮助让我们看看我是否能够将其转换为代码形式。@OutOfBoundsException:我有点想亲自尝试一下,看看它是否有效。连接组件标记算法肯定比我建议的要简单得多。可能,该算法与您建议的算法非常相似。