在C#中查找数组中的对象模式

时间:2010-11-27 19:02:09

标签: c# arrays algorithm

我正在寻找一种在数组中查找对象模式的有效方法。 这是我必须解决的问题。我正在编写一个有形的界面应用程序,它从网络摄像头收集数据,将其转换为黑白图像,我从中创建一个数组。创建的数组看起来类似于:

1111111111111111111111111111
1111110001111111111000111111
1111100000111111110000011111
1111100000111111110000011111
1111110001111111111000111111
1111111111111111111111111111

零处代表图像中的黑色。我有大约32个(4行,每个有8个圆圈)圆圈,我需要找到一种有效的方法来找到它们的坐标。我不需要整个形状,只需要每个圆圈的一组坐标。

感谢您的帮助。

此致 Teodor Stoyanov

3 个答案:

答案 0 :(得分:1)

我可以立即看到三个选项(元组用于表示矩阵中的坐标):

  1. 您可以使用BitArray 矩阵中的每个点,如果坐标具有O,则设置该位,成本将是 O(行长x列长)用于存储。如果您知道要检查的坐标,则检索为O(1),如果您只想查找所有O,则检索为O(n)

  2. 您可以使用List<Tuple<int,int>> 只存储坐标 矩阵中的每个O,成本都是 O(m)用于存储,m是O的数量。检索也是O(m)

  3. 您也可以选择2 使用Dictionary<Tuple<int, int>, bool>,允许O(1)检索 时间,如果你知道你的坐标 想检查。

答案 1 :(得分:1)

选择一个任意0并从中进行洪水填充。平均您找到的所有0的坐标以获得圆的中心。删除你淹没的0并重复。

答案 2 :(得分:0)

真的有一种简单的方法可以做到这一点,但你能做的最好的事情就是修补Artificial Neural Networks。它们允许您输入数据并通过许多不同的数据输入获得输出。如果您构建正确的网络,它将在多次迭代中自行调整其权重。

很抱歉,但我怀疑你是否会在代码中找到准确的解决方案。虽然我没有使用任何这些库或资源,但快速浏览它们会使它们看起来相当不错: