算法 – 开/关手识别:一种简单的方法

我正在寻找一种简单的方法来识别手是打开还是关闭.

我正在使用C#和EmguCV,但在这种情况下这并不重要.我只需要一个描述我需要做的“伪代码”.

该算法的输入图像是表示手的二进制图像(我已经实现了分割过程).输出必须是布尔值(对于打开的手为true,否则为false).

这是一个输入示例:

我试着考虑一下凸壳或白色区域的百分比,但我想这些方法对于这类问题来说还不够健壮.

最佳答案 在机器学习术语中,您要做的是对输入图像大小的二进制输入矩阵进行分类(白色像素为1,黑色像素为0),单个二进制输出(1为开放手,0为封闭)手).

如果您通过拍摄大量关闭和张开双手的图像来构建训练集并用手标记它们(双关语并非意图),那么您可以应用监督学习算法来创建分类器.

监督学习算法有很多选择.尝试第一次拍摄的最佳选择可能是支持向量机:

http://en.wikipedia.org/wiki/Support_vector_machine

支持向量机通过基本上计算输入图像与训练集中提供的示例之间的“距离”来工作.如果输入图像对于来自训练集的开放手的示例平均“接近”而不是来自训练集的闭合手,则将其分类为开放手(反之亦然).

还有许多其他监督学习算法:

http://en.wikipedia.org/wiki/Supervised_learning

点赞