我正在尝试通过视频识别该人(不是通过他的脸,而是通过他的 body )。到目前为止,我要做的是找到一个人的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;

发生什么事

我正在尝试跟踪视频供稿中的选定人员。该人可以从一个摄像机移动到另一个摄像机。
从视频帧中提取 personA的 body 的 body ,计算并存储其HOG,HS,RGB直方图...然后从下一帧计算所有检测到的人的直方图,并将其与 person的直方图进行匹配匹配的直方图(具有最小距离)被视为同一个人(personA)...因此它将继续跟踪该个人...

问题
  • 准确性不好(有时它告诉2个人,使用不同颜色的衣服,相同)

  • 建议
  • 我应该更改/删除
  • 我应该使用 CvInvoke.CalcHist(...)来计算直方图吗? 代替HS和RGB的密集直方图
  • 我应该在计算距离之前对直方图进行归一化。
  • 此规范化方法好吗? (每个值减去为数组的均值)o​​jit_rli
  • 或者我应该尝试其他方法。

  • 如果需要更多信息,则非常感谢任何形式的帮助/建议,请发表评论。
    谢谢,

    最佳答案

    我也在同一个项目上工作,我们有相同的工作理念,我对此有解决方案。

    解决方案1:
    在检测到人的作物之后,将检测到的人提取特征保存下来,保存这些特征,然后在您希望通过框架对人提取特征进行跟踪时对其进行比较,我编写了整个算法

    解决方案2
    (以防您想加快速度)找到人物的区域,将其转换为二进制,保存边,将整个帧转换为二进制,找到人体区域

    我发现了其他技巧以提高准确性,请通过电子邮件与我联系。我在编写代码时遇到问题,我们可能会共同努力找到最佳解决方案

    10-04 21:25
    查看更多