【发布时间】: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