我正在寻找一种在数组中查找对象模式的有效方法。 这是我必须解决的问题。我正在编写一个有形的界面应用程序,它从网络摄像头收集数据,将其转换为黑白图像,我从中创建一个数组。创建的数组看起来类似于:
1111111111111111111111111111
1111110001111111111000111111
1111100000111111110000011111
1111100000111111110000011111
1111110001111111111000111111
1111111111111111111111111111
零处代表图像中的黑色。我有大约32个(4行,每个有8个圆圈)圆圈,我需要找到一种有效的方法来找到它们的坐标。我不需要整个形状,只需要每个圆圈的一组坐标。
感谢您的帮助。
此致 Teodor Stoyanov
答案 0 :(得分:1)
我可以立即看到三个选项(元组用于表示矩阵中的坐标):
您可以使用BitArray 矩阵中的每个点,如果坐标具有O,则设置该位,成本将是 O(行长x列长)用于存储。如果您知道要检查的坐标,则检索为O(1),如果您只想查找所有O,则检索为O(n)
您可以使用List<Tuple<int,int>>
只存储坐标
矩阵中的每个O,成本都是
O(m)用于存储,m是O的数量。检索也是O(m)
您也可以选择2
使用Dictionary<Tuple<int, int>,
bool>
,允许O(1)检索
时间,如果你知道你的坐标
想检查。
答案 1 :(得分:1)
选择一个任意0并从中进行洪水填充。平均您找到的所有0的坐标以获得圆的中心。删除你淹没的0并重复。
答案 2 :(得分:0)
真的有一种简单的方法可以做到这一点,但你能做的最好的事情就是修补Artificial Neural Networks。它们允许您输入数据并通过许多不同的数据输入获得输出。如果您构建正确的网络,它将在多次迭代中自行调整其权重。
很抱歉,但我怀疑你是否会在代码中找到准确的解决方案。虽然我没有使用任何这些库或资源,但快速浏览它们会使它们看起来相当不错: