我正在寻找一种简单的方法来识别手是打开还是关闭。
我正在使用C#和EmguCV,但在这种情况下这并不重要。我只需要一个描述我需要做的“伪代码”。
此算法的输入图像是表示手的二进制图像(我已经实现了分割过程)。输出必须是布尔值(对于打开的手是true,否则是false)。
这是一个输入示例:
我试着考虑一下凸壳或白色区域的百分比,但我想这些方法对于这类问题还不够健壮。
答案 0 :(得分:1)
凸壳应该做好,你可以计算出凸壳中的黑色面积百分比,如果它大于某个阈值,那么手是开放的。 否则你只需计算面积和面积。白色区域的周长,然后检查它们的比例,对于张开的手区域/周长应该小于闭合的手。
答案 1 :(得分:1)
在机器学习术语中,您要做的是对输入图像大小的二进制输入矩阵进行分类(白色像素为1,黑色像素为0),单个二进制输出(打开手为1, 0表示闭手)。
如果你通过拍摄大量关闭和张开双手的图像来构建训练集并用手标记它们(双关语不是意图),那么你可以应用监督学习算法来创建分类器。
监督学习算法有很多选择。尝试第一次拍摄的最佳选择可能是支持向量机:
http://en.wikipedia.org/wiki/Support_vector_machine
支持向量机通过基本上计算输入图像与训练集中提供的示例之间的“距离”来工作。如果输入图像平均来说比训练集中的开放手的示例“接近”而不是来自训练集的闭合手,则将其分类为张开的手(反之亦然)。
还有许多其他监督学习算法: