gpt4 book ai didi

opencv - EmguCV仅剪切面部和颈部皮肤并保存新图像

转载 作者:行者123 更新时间:2023-12-02 08:31:01 25 4
gpt4 key购买 nike

在我的应用程序中,我将输入人像,我想获得该人的脸部和颈部只有作为单独图像的输出。示例:下面的图片作为输入:(来源:http://www.fremantlepress.com.au)

我想获取向上图像作为输出:

我要执行以下算法:

1.检测面部
2.选择(面部区域* 2)区域
3.检测皮肤和颈部
4.剪切所选图像的皮肤区域
5.将剪切的区域保存到新图像


在浏览EmguCV Wiki和其他在线资源时,我有信心执行步骤1和2。但是我不确定如何完成步骤3和4。
我正在查看一些功能/方法(“Cunny Edge Detection”(轮廓边缘检测),“Contour”(轮廓)等),但是我不确定如何以及在何处应用这些方法。
我正在使用EmguCV(C#)和Windows窗体应用程序。
请帮助我如何执行第3步和第4步。如果有人详细说明了这两个步骤以及一些代码,我将很高兴。

最佳答案

嗯,有几种方法可以解决这个问题。边缘检测仅会为您提供边缘的二进制图像,并且您将必须执行一些线跟踪或霍夫变换来检测这些位置。精度会有所不同。

我会假设您可以检测到眼睛和脸部的相对位置。我希望统计过滤器会比神经网络(这是最好的选择)提供更好的结果,并具有更好的性能。如果使用彩色图像,自然的颜色分割是一个很好的选择(这很容易实现)。我还将假设头部位置可能会略有变化,而颈部在图像中或多或少可见。

因此,对于统计过滤器:

(请注意,在处理灰度图像时,个人的背景类似于面部数据,因此最好使用彩色图像)。

  • 复印我们原始图像的空白副本。我们将以此为基础形成一张脸部的二值 map ,而不是
    必要的条件下,这将使我们更轻松地检查我们的成功
  • 在原始图像中找到面部,眼睛和嘴巴。

    我们可以假设来自眼睛和嘴巴的任何数据构成了脸部的一部分,并将其标记在
    带“1”的空白副本。
  • 现在我们需要一些数学运算,因为我们知道人脸检测算法只能在
    与相机成一定 Angular 。我们使用它并从某些图像中选择一个统计遮罩
    假设图像的两部分距离脸颊区域10x10像素2或3。这将是最
    图像中人脸的可能区域。我们使用这些数据并从图像中获取值,例如
    均值和标准差。
  • 现在,我们扫描检测到脸部的图像的分割部分。我们不会
    整个图像,因为这将需要很长时间。 (注意:有一个边框是尺寸的一半
    不会被看到的面具)。我们检查每个像素及其周围像素的周围
    10x10遮罩的大小。如果平均值或标准偏差(无论我们在检查什么)是
    类似于我们的过滤器说的10%以内,然后我们将空白副本中的该像素标记为“1”
    并认为该像素属于皮肤。

  • 至于色彩分割:

    (注意:您也可以尝试此过程进行灰度处理,但是由于做工困难,因此不太成功)
  • 重复步骤1至2。
  • 同样,我们将选择图像中可以包含面部数据的某些区域(即10
    眼睛下方的像素)。但是,在这种情况下,我们检查形成该颜色的数据
    像素。别忘了HSV图像可以通过此过程获得更好的结果
    所以。我们可以扫描图像,检查每个像素是否具有相似的颜色。如果匹配
    在您的二进制 map 上标记它。

    一种替代方法是从图像的R G和B光谱中减去或相加一个
    只有数据面才能生存。您可以通过以下方式将其直接转换为二进制图像
    使任何值> 1 == 1;

  • 这仅适用于皮肤,因为对于头发,我们将需要其他过滤器。一些注意事项:

    在彩色图像上工作的统计过滤器具有更大的能力,但是需要更长的时间。

    使用图像中的数据形成统计过滤器,因为这样可以对其他肤色进行分类。数学设计的滤镜或颜色分割将需要大量工作才能实现相同的可变性。

    掩模的尺寸很重要,掩模的尺寸越大,错误发生的可能性就越小,但是处理时间又增加了。

    如果您要检查的像素已经为1(通过眼睛/ Nose /嘴巴检测分类),则可以通过引用二进制图副本中的相同区域来加快此过程,然后为什么要再次检查它就跳过它。

    多个皮肤滤镜将提供更好的结果,但是也可能会引入更多的噪声,并且记住每个滤镜必须与增加像素处理时间相比进行比较。

    要获得准确的算法,将需要一些反复试验,但是使用这些方法可以相当快地看到可比的结果。

    希望这对您有所帮助。很抱歉没有包含任何代码,但是希望其他人可以帮助您,如果您遇到麻烦,自己编写代码可以帮助您了解正在发生的事情并减少处理时间。如果您需要其他建议,请告诉我,我正在做图像分析博士学位,以使您知道建议是正确的。

    照顾自己

    克里斯

    [编辑]
    快速的结果:

    这是用于检测头发的20x20滤镜。我编写的程序目前仅适用于灰度图像,因此皮肤检测会受到石头的干扰(请参阅下文)

    面部区域的彩色图像

    平均头发过滤器20x20蒙版的二进制映射40%允许错误

    可以看出,在这种情况下,衬衫会干扰头发,因为它与头发的颜色匹配。这可以通过仅检查检测到的面部区域的前三分之一或一半来消除。

    平均皮肤过滤器20x20蒙版的二进制映射40%允许错误

    在此图像中,我仅使用了一个由下巴区域形成的滤镜,因为残茬显然会改变滤镜的性能。个体后面的石头上仍然存在噪音,但是使用彩色图像可以消除这种情况。情况下的空白可以由算法或其他过滤器填充。衬衫边缘再次发出噪音,但是我们可以通过检测衬衫并去除形成衬衫的任何数据或仅在某些区域仔细查看来将噪声降至最低。

    检查区域示例

    为了消除错误分类,您可以获取分割图像的前三分之二,并在面部区域的底部寻找面部和检测到的眼睛的宽度,以获取颈部数据。

    再次欢呼

    克里斯

    关于opencv - EmguCV仅剪切面部和颈部皮肤并保存新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6449260/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com