【问题标题】:Body recognition in EmguCV/OpenCV (Tracking person in video)EmguCV/OpenCV 中的身体识别(视频中的人跟踪)
【发布时间】:2017-04-27 00:57:10
【问题描述】:

我正在尝试识别视频中的人(不是通过他的脸,而是通过他的身体)。到目前为止,我所做的是找到一个人的 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的身体,计算并存储其HOG,HS,RGB直方图......然后从下一帧计算所有检测到的人的直方图并与personA最匹配的直方图(距离最小)被认为是同一个人(personA)...所以继续跟踪那个人...

问题

  • 准确度不好(有时它告诉 2 个人,用不同颜色的布,同样)

建议

  • 我应该更改/删除什么
  • 我是否应该使用 CvInvoke.CalcHist(...); 而不是 HS 和 RGB 的密集直方图计算直方图
  • 我应该在计算距离之前对直方图进行归一化吗?
  • 这种归一化方法好吗? (数组的每个值均值)
  • 或者我应该尝试其他方法。

任何形式的帮助/建议都将受到高度赞赏,如果需要更多信息,请发表评论。 谢谢,

【问题讨论】:

    标签: c# opencv image-processing tracking emgucv


    【解决方案1】:

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

    解决方案 1: 在检测到人之后裁剪检测到的人提取特征,保存这些特征,下次你希望从框架中跟踪人提取特征时比较它们,我已经编写了整个算法

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

    我找到了其他准确性的技巧,请通过电子邮件与我联系我在编写代码时遇到问题,我们可能会一起寻找最佳解决方案

    【讨论】:

    • 您好,欢迎来到 Stack Overflow。此处不接受通过电子邮件征求联系;理想情况下,答案应包含解决 OP 问题所需的所有内容。如果它是开源的,请随意添加指向您的代码的链接。
    • 首先感谢您的回复。我已经在作为您的解决方案 1 工作,我肯定会尝试解决方案 2。如果我们能一起工作,那就太好了。
    • 欢迎 Nabeel,我正在研究单台相机,我使用 SVM 来存储人体细节,但它们是一个小问题,我找不到人体的轮廓区域:Rectangle[] reg ; des.SetSVMDetector(HOGDescriptor.GetDefaultPeopleDetector()); reg = des.DetectMultiScale(image);这个包含少量背景的返回矩形,我希望只有人体区域。
    猜你喜欢
    • 2011-02-20
    • 2014-11-15
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    相关资源
    最近更新 更多