c++ 从数组中获取形状

hvvq6cgz  于 2024-01-09  发布在  其他
关注(0)|答案(2)|浏览(166)

我有一个由0和1组成的二维数组,我想知道1所创建的形状。
例如,这个数组-将是一个矩形:

  1. [[0,0,0,0,0],[0,1,1,0,0],[0,1,1,0,0],[0,1,1,0,0],[0,0,0,0,0]]

字符串
我做了这个数组,我不知道在哪里/哪种机器学习模型我应该使用。

  1. for (int pins = 0; pins < 6; pins++) {
  2. for (int y = 0; y < 6; y++) {
  3. if (analogRead(inputs[y]) > 300) {
  4. Data[pins][y] = 1;
  5. }
  6. else {
  7. Data[pins][y] = 0;
  8. }
  9. }
  10. }


我有一个想法,将数组转换为图像,并使用图像检测模型,但我也不知道如何做到这一点。
(我使用Arduino IDE与ESP 32连接)

d8tt03nd

d8tt03nd1#

可能,您正在寻找的是convex hull

如果是的话,请查看示例here来学习如何计算它。您可以使用顶点的数量来实现对象是三角形,正方形还是圆形。
如果你是Stackoverflow的新手,看看这个教程:https://stackoverflow.com/tour

pqwbnv8z

pqwbnv8z2#

@Duloren建议的凸形船体算法将与一些额外的后处理一起工作:
您可以检测“长边”的数量(可能比形状的大小的30%长的边)。对于3个“长边”,它将是一个三角形,对于2个垂直的平行“长边”对,它将是一个矩形。在@Duloren给出的例子中,凸船体将返回3个长边,顶部的线,右边的直线和左下角的对角线,所以它是一个三角形。
你也可能需要将几乎平行的边合并组合成“长边”。例如,如果Duloren图像中的顶部蓝色线向右倾斜,那么顶部行的两个最右边的点就不会是形状的一部分。在这种情况下,顶部“长边”将以26度的Angular 分成两条线,长度为3和2.2(=sqrt(5))。
要检测矩形,您还必须允许一些误差,即边的平行和垂直程度。
如果凸面船体的结果没有任何“长边”,则形状可能是圆。要测试这一点,您可以计算凸面船体返回的所有点的质心。如果所有这些点与质心的距离相似,则形状可能是圆。
否则,形状将是未分类的(不是圆形,不是三角形,不是矩形)。

相关问题