嗨,我一直在研究这个问题,但却没有很好的解决方案.
我正逐帧阅读视频,并使用背景减法来识别有移动的区域,并使用cvFindContours()来获取移动对象的矩形边界.
假设程序保持简单,那么只有2个人.
这些物体以它们可以重叠的方式移动,以一定的间隔转弯并移开.
我怎样才能正确标记这个人类x 2.
cvFindContour可以以随机方式返回边界.对于Frame1,Frame2,Frame3 ...... FrameN
我最初可以比较矩形边界质心来正确地标记人类.一旦人类重叠并离开,这种方法就会失败.
我试图跟踪原始obj的像素颜色(但是人类非常相似,某些区域有类似的颜色,如手,腿,头发)因此不够好.
我正在考虑使用Image Statistic:
CountNonZero(),SumPixels()Mean()Mean_StdDev()MinMaxLoc()Norm()
唯一地区分这两个对象.我相信这将是一个更好的方法.
这是一个难题,任何解决方案都不会是完美的.计算机视觉被戏称为"AI完全"学科:如果你解决计算机视觉并且你已经解决了所有的人工智能.
背景减法可以是检测物体的好方法.如果需要改进背景减法结果,可以考虑使用MRF.据推测,您可以根据blob的大小判断何时存在单个对象以及两个blob何时合并.如果在合并斑点的时间内轨迹没有快速变化,则可以进行卡尔曼跟踪并使用一些启发式方法来消除后续斑点的歧义.
即使两个对象之间的颜色相似,您也可以考虑尝试使用均值移位跟踪器.您可能需要进行一些粒子过滤来跟踪关于谁是谁的多个假设.
还有一些更复杂的技术称为分层跟踪.Jojic和Frey,Winn,Zhou和Tao以及其他人最近开展了一些工作.这些技术中的大多数具有非常强的假设和/或需要大量工作才能正确实现.
如果您对这个主题感兴趣,我强烈建议您参加计算机视觉课程和/或阅读Ponce和Forsyth等教科书.