C# EmguCV/OpenCV中的身体识别(视频中跟踪人物)
我试图在视频中认出那个人(不是通过他的脸,而是通过他的身体)。到目前为止,我所做的是找到一个人的HOG、HS和RGB直方图,并将其与所有其他人进行比较以找到他 我正在使用EmguCV,但也将感谢OpenCV的帮助 使用C# EmguCV/OpenCV中的身体识别(视频中跟踪人物),c#,opencv,image-processing,tracking,emgucv,C#,Opencv,Image Processing,Tracking,Emgucv,我试图在视频中认出那个人(不是通过他的脸,而是通过他的身体)。到目前为止,我所做的是找到一个人的HOG、HS和RGB直方图,并将其与所有其他人进行比较以找到他 我正在使用EmguCV,但也将感谢OpenCV的帮助 使用 Size imageSize = new Size(64, 16); Size blockSize = new Size(16, 16); Size blockStride = new Size(16, 8); Si
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);
double distance = 0;
for (int i = 0; i < hist1.Length; i++)
{
distance += Math.Abs(hist1[i] - hist2[i]);
}
return distance;
计算HS直方图的代码(RGB使用相同的方法)
Image[]channels=hsvImage.Copy().Split();
图像色调=通道[0];
图像sat=通道[1];
计算(新图像[]{hue},真,空);
计算(新图像[]{sat},真,空);
float[]huehist=dh.GetBinValues();
float[]sathist=dh2.GetBinValues();
使用
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);
double distance = 0;
for (int i = 0; i < hist1.Length; i++)
{
distance += Math.Abs(hist1[i] - hist2[i]);
}
return distance;
双倍距离=0;
for(int i=0;i
发生了什么事
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);
double distance = 0;
for (int i = 0; i < hist1.Length; i++)
{
distance += Math.Abs(hist1[i] - hist2[i]);
}
return distance;
我正在尝试从视频源跟踪选定的人。人可以从一个摄像机移动到另一个摄像机。
从视频帧中提取人物角色的主体,计算并存储其HOG、HS、RGB直方图。。。然后从下一帧开始,计算所有检测到的人的直方图,并与人物角色的直方图进行匹配最匹配的直方图(最小距离)被视为同一个人(人物角色)。。。所以它会继续追踪那个人
问题
- 准确度不好(有时它会告诉两个人,颜色非常不同的衣服,相同)
- 我应该更改/删除什么
- 我应该使用CvInvoke.CalcHist(…)计算直方图吗代替HS和RGB的密集直方图
- 我应该在计算距离之前规范化直方图吗
- 这种归一化方法好吗?(数组的每个值减去平均值)
- 或者我应该试试别的
谢谢,我也在同一个项目上工作,我们有相同的工作理念,我有解决这个问题的方法 解决方案1: 在检测到人之后裁剪检测到的人提取特征,保存这些特征,下次你希望跟踪这些人的时候从帧中提取特征并比较它们,我已经写了整个算法 解决方案2 (如果要加快速度)查找人物区域转换为二进制保存边将整个帧转换为二进制,查找人体区域
我还发现了其他提高准确性的技巧,请通过电子邮件与我联系。我在编写代码方面有问题,我们可能会合作找到最佳解决方案。我也在同一个项目上工作,我们有相同的工作理念,我有解决此问题的方法 解决方案1: 在检测到人之后裁剪检测到的人提取特征,保存这些特征,下次你希望跟踪这些人的时候从帧中提取特征并比较它们,我已经写了整个算法 解决方案2 (如果要加快速度)查找人物区域转换为二进制保存边将整个帧转换为二进制,查找人体区域
我找到了其他提高准确性的技巧,请通过电子邮件与我联系。我在编写代码时遇到问题,我们可能会一起找到最佳解决方案。您好,欢迎使用堆栈溢出。此处不接受通过电子邮件寻求联系;理想情况下,答案应该包含解决OP问题所需的一切。如果你的代码是开源的,请随意添加一个链接。首先感谢你的回复。我已经在为您的解决方案1工作,我肯定会尝试解决方案2。欢迎Nabeel,我正在使用一个摄像头,我使用SVM存储人体细节,但有一个小问题,我找不到人体的轮廓区域:矩形[]reg;des.setsvmdetator(HOGDescriptor.GetDefaultPeopleDetector());reg=des.检测多尺度(图像);这个返回矩形包含lill量的背景,我希望只有人体区域。您好,欢迎使用堆栈溢出。此处不接受通过电子邮件寻求联系;理想情况下,答案应该包含解决OP问题所需的一切。如果你的代码是开源的,请随意添加一个链接。首先感谢你的回复。我已经在为您的解决方案1工作,我肯定会尝试解决方案2。欢迎Nabeel,我正在使用一个摄像头,我使用SVM存储人体细节,但有一个小问题,我找不到人体的轮廓区域:矩形[]reg;des.setsvmdetator(HOGDescriptor.GetDefaultPeopleDetector());reg=des.检测多尺度(图像);这个包含少量背景的返回矩形,我希望只有人体区域。