EmguCV / OpenCV中的人体识别(视频中的跟踪人员)

时间:2016-12-12 07:38:16

标签: c# opencv image-processing tracking emgucv

我试图识别视频中的人(不是通过他的脸,而是通过他的身体)。到目前为止我所做的是找到一个人的HOG,HS和RGB直方图,并将其与所有其他人进行比较以找到他。

我正在使用EmguCV,但OpenCV的帮助也将受到赞赏。

HOG是使用

计算的
        Size imageSize = new Size(64, 16);
        Size blockSize = new Size(16, 16);
        Size blockStride = new Size(16, 8);
        Size cellSize = new Size(8, 8);

        HOGDescriptor hog = new HOGDescriptor(imageSize, blockSize, blockStride, cellSize);

        float[] hogs = hog.Compute(image);

计算HS直方图的代码(RGB使用相同的方法)

        Image<Gray, byte>[] channels = hsvImage.Copy().Split();
        Image<Gray, byte> hue = channels[0];
        Image<Gray, byte> sat = channels[1];

        dh.Calculate<byte>(new Image<Gray, byte>[] { hue }, true, null);
        dh2.Calculate<byte>(new Image<Gray, byte>[] { sat }, true, null);

        float[] huehist = dh.GetBinValues();
        float[] sathist = dh2.GetBinValues();

使用

计算2个直方图的距离
        double distance = 0;
        for (int i = 0; i < hist1.Length; i++)
        {
            distance += Math.Abs(hist1[i] - hist2[i]);
        }
        return distance;

发生了什么

我正在尝试从视频Feed跟踪所选人员。这个人可以从相机移动到相机。 从视频帧中提取 personA 的主体,计算并存储其HOG,HS,RGB直方图...然后从下一帧计算所有检测到的人的直方图并与直方图匹配。 personA 最匹配的直方图(最小距离)被视为同一个人(personA)...所以它会继续追踪那个人......

问题

  • 准确性不好(有时它会告诉2个人,颜色不同的布料一样)

建议

  • 我应该更改/删除
  • 我应该使用 CvInvoke.CalcHist(...); 而不是HS和RGB的密集直方图计算直方图
  • 我应该在计算距离之前对直方图进行标准化。
  • 这种规范化方法好吗? (每个值减去数组的意思)
  • 或者我应该尝试其他的东西。

如果需要更多信息,任何类型的帮助/建议都将获得高度赞赏,请发表评论。 谢谢,

1 个答案:

答案 0 :(得分:0)

我也在同一个项目上工作,我们有相同的工作理念,我有解决这个问题的方法。

解决方案1: 在检测到人物裁剪后检测到的人物提取特征,保存那些特征,接下来他们希望跟踪人物提取特征的时间框架比较它们,我已经编写了整个算法

解决方案2 (如果你想加速)找到人的区域转换为二进制保存边将整个帧转换为二进制,找到人体区域

我找到其他精确的技巧请通过电子邮件与我联系我有编写代码的问题我们可能会一起工作找到最佳解决方案