3

我正在尝试从视频源中提取人物,以便以后可以使用他的图像。我只需要提取人体,而忽略环境。好消息是背景是静态的。我尝试使用 AForge 并应用 CustomFrameDifferenceDetector 过滤器,它将当前帧与静态背景图像进行比较并提取不同的像素(差异>阈值)。它效果很好,但是当皮肤或衣服的一部分与背景颜色相似时就会出现问题。在这些情况下,过滤器会忽略这些部分,结果会在体内出现各种孔。简单地降低阈值并不能解决问题,因为身体阴影和其他噪声会增加(即使在噪声抑制下)。

你知道这个问题的任何已知解决方案吗?或者它仍然是未解决的问题?

4

2 回答 2

3

这是一个很难解决的问题(也是微软 Kinect 不只使用可见光的原因之一,也是蓝/绿屏仍然如此受欢迎的原因之一)。我会尝试去除孔(你应该能够预测身体必须在哪里)。如果您有处理能力,请使用不同的阈值并合并结果。您也可以尝试过滤新的分离图像(例如,将当前帧添加到最后一帧并标准化结果)。通过这种方式,您可以更加一致地跟踪丢失一帧的形状。

另一种方法:仅使用检测到的形状/区域来检测身体的位置。即忽略其特定形状并在估计的身体位置上方/周围使用预制形状。如果您想做某种类似蓝屏的行为,这很可能不起作用,但它也可能有助于关闭漏洞。

于 2011-07-16T10:44:48.230 回答
1

Alturos.Yolo完全符合您的要求。

Yolo 从带注释的图像中学习如何检测您正在寻找的对象。首先,您需要使用 Nuget 包管理器安装项目以及一组已经训练好的图像。在您的情况下,YOLOv2-tiny 模型就足够了:

Install-Package Alturos.Yolo
Install-Package Alturos.YoloV2TinyVocData 

安装后,您可以像这样使用它来检测图像中的人:

using (var yoloWrapper = new YoloWrapper("yolov2-tiny-voc.cfg", "yolov2-tiny-voc.weights", "voc.names"))
{
    var items = yoloWrapper.Detect(@"your_image.jpg");
    //if (items[0].Type == "Person") { ... }
}

items 数组将包含有关找到的所有对象的信息。您可以使用 Type 属性检查您正在查看的是否是人。

于 2019-05-14T09:13:04.647 回答