我有一个由0和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]]
字符串
我做了这个数组,我不知道在哪里/哪种机器学习模型我应该使用。
for (int pins = 0; pins < 6; pins++) {
for (int y = 0; y < 6; y++) {
if (analogRead(inputs[y]) > 300) {
Data[pins][y] = 1;
}
else {
Data[pins][y] = 0;
}
}
}
型
我有一个想法,将数组转换为图像,并使用图像检测模型,但我也不知道如何做到这一点。
(我使用Arduino IDE与ESP 32连接)
2条答案
按热度按时间d8tt03nd1#
可能,您正在寻找的是convex hull:

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