参考了Maylor K. Leung and Yee-Hong Yang 的《First Sight A human body outline labeling system》,
开始针对轮廓进行人体分割,
第一步:寻求U形状的身体端点,从图中可以看出,一般情况下,会出现五个U形端点,分别是:头部,左手,右手,左脚,右脚,
算法是,
设定某一个参考长度L,大于L的矢量可以认为它是身体轮廓的一部分,小于它则忽略
按照矢量化后的轮廓从某一点开始寻找,找到一个大于L的矢量记为Li,找到下一个一个大于L的矢量记为Lj,
比较Li到Lj的夹角,
如果夹角在某一范围内(0度到30度),(注意这里角度为正,表示它是凸的),则认为它们是平行的,记录这两个矢量,找到一个U端点.
如此直到找出五个U端点
PS:特殊情况,如果身体出现遮挡,可能某些端点消失,这一点待考虑。
第二步: 确定四肢的位置
通过U形点推算左上臂,因为已经知道构成U形点的两个矢量为手臂的轮廓,这样取这两个矢量的前序矢量Lp与后序矢量Ll,
如果它们的条件满足Lp>L && Ll>L && Lp 与Ll的夹角小于30度,既可以认为是平行的。这样两个矢量构成左上臂。
以此类推,右上臂,左大腿,右大腿的位置。
第三步: 确定身体主干的位置
算法如下,
因为我目前假定人体运动始终正面于摄像头,身体主干的位置移动不大,
所以用一个比较懒的方法,将所有的四肢的位置用一个矩形拟和。得到躯干的位置。