我正在尝试通过视频识别该人(不是通过他的脸,而是通过他的 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)...因此它将继续跟踪该个人...
问题
建议
如果需要更多信息,则非常感谢任何形式的帮助/建议,请发表评论。
谢谢,
最佳答案
我也在同一个项目上工作,我们有相同的工作理念,我对此有解决方案。
解决方案1:
在检测到人的作物之后,将检测到的人提取特征保存下来,保存这些特征,然后在您希望通过框架对人提取特征进行跟踪时对其进行比较,我编写了整个算法
解决方案2
(以防您想加快速度)找到人物的区域,将其转换为二进制,保存边,将整个帧转换为二进制,找到人体区域
我发现了其他技巧以提高准确性,请通过电子邮件与我联系。我在编写代码时遇到问题,我们可能会共同努力找到最佳解决方案