gpt4 book ai didi

c# - EmguCV/OpenCV 中的 body 识别(跟踪视频中的人物)

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:18 24 4
gpt4 key购买 nike

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

问题

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

建议

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

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

最佳答案

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

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

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

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

关于c# - EmguCV/OpenCV 中的 body 识别(跟踪视频中的人物),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41096122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com