1

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

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

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

4

1 回答 1

1

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

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

于 2012-12-16T14:20:59.097 回答