使用Emgu CV检测到的面部虚拟头发 - C#

时间:2012-12-15 11:06:16

标签: c# image-processing emgucv face-detection

我目前的项目要求我学习人脸检测/跟踪和图像处理,根据我在c#的经验,我选择Emgu CV作为我的面部检测和跟踪选择库。从我到目前为止学到的知识,我可以进行人脸检测和跟踪,以及基本的图像处理。

我的目标是能够在检测到的脸部上放置虚拟头发。我想要达到的目的与[此视频]类似:http://www.youtube.com/watch?v=BdPmECfUFcI

我想知道的是用于处理检测到的脸上不同种类发型的头发位置的技术。我以什么图像格式存放头发?

1 个答案:

答案 0 :(得分:1)

观看视频后,我注意到它认为头部是一个扁平的矩形而不是矩形棱镜(3D物体),所以它不考虑使用透视变换,我也不会考虑它。这是一个限制,但在进行此类展示位置时,这是一个不错的第一步。请注意,考虑到透视并不是一个简单的问题,您的面部跟踪算法也需要能够处理更复杂的配置(例如,眼睛可能不完全可见)。

所以,你想要的第一件事是根据眼睛与x轴的角度对齐的边界矩形,如右图所示(红色部分表示眼睛之间的连接)。左图显示了与轴对齐的典型边界框,但不适用于此问题。

enter image description here

在您考虑头部是对称的之后,问题也会简化,因此您知道上图中的顶部中间点是头顶的中间位置。此外,考虑到典型的头部可能在顶部比在底部更大,那么您可以在下图中看到矩形的宽度接近前额的宽度。例如,您也可以仅考虑头部上半部分的边界矩形。

enter image description here

现在剩下的就是将一些对象放在这个矩形中。为此,您需要增加要定位的此对象的描述,使其不是纯粹的像素。我们可以定义“入口宽度”(EW)和“入口中间点”(EM)。该EW确定另一个矩形(头部一个)所需的宽度以定位它。因此,如果EW小于所需值,则在EW较大时分别对此对象进行升级。请注意,头部矩形的整个宽度通常是对该对象进行定位的过高估计,因此您可以尝试宽度的百分比。 EM值有助于了解如何将此对象放在头部上。在下图中,EW是水平蓝色虚线水平,EM是其中间点。垂直蓝线表示要在头部矩形的顶部区域内移动此对象的EM大小。

enter image description here

此对象需要的唯一其他特殊功能是被视为背景的值。因此,在绘制此对象时,很容易知道是否使点完全透明(背景值)或完全不透明(其他任何东西)。这是我想到的基本上需要做的草图。