【问题标题】:Change skin colour programmatically以编程方式更改肤色
【发布时间】:2011-01-28 21:48:35
【问题描述】:

有没有人有任何关于调整一张图片以使其中的肤色与另一张图片相匹配的信息或建议?

这是一个有点晦涩的问题,但我希望之前有人遇到过这个问题!我这样做的目的是让我可以使用 Python(或任何语言,只要它是编程方式)将一张图像中的人脸替换为另一张图像中的人脸。

我找到了几篇与该主题相关的论文:

但是,内容超出了我的能力范围,因此我无法根据他们所说的内容确定具体要做什么。

任何形式的建议都将不胜感激,因为我目前不知道该怎么做。

【问题讨论】:

  • +1 用于提供论文链接。我浏览了第一个,发现它也在我的脑海中。我认为对你来说一个好的方法是尝试查看参考文献,看看他们引用了哪些过去的论文,特别是第 4.2 节中的两篇。如果您回溯到足够远的地方,您可能会发现一些更容易理解的东西,或者至少可以帮助您理解新方法。

标签: python image-processing image-manipulation skin


【解决方案1】:

这里有一些关于如何开始的一般性高级建议。

基本上,您正在做的是一个优化问题。这些算法用于解决很多问题,并且有几种众所周知的方法可以做到这一点。他们归结为这一点

  1. 创建一个评分函数,它可以告诉您一个数字,您的结果有多好。数字越大越好。
  2. 创建一个函数,该函数接受输入和一些参数并生成可评分的输出
  3. 这很重要:评分函数应该根据#2 的参数保持一定程度的连续性。如果您有两个参数,并以 3D 形式绘制(param1、param2、score),它看起来就像一个带有大山丘的凹凸不平的表面。
  4. 你现在的工作是找到表面的最大值。你可能有两个以上的参数——在这种情况下,你有一个 N-D 表面——但想法是一样的

查找爬山、遗传算法或优化问题。一本很好的 Python 代码书籍是 Toby Segaran 的“Programming Collective Intelligence”。

一般来说爬山是这样的:

  1. 好好猜测一下参数
  2. 创建输出和得分
  3. 稍微改变一个参数
  4. 给输出打分
  5. 如果更好,请继续朝这个方向前进,如果情况更糟,请改变方向。
  6. 如果您遇到困难,请到地表的其他地方尝试一下。
  7. 如果您找到了一个局部最大值,但它还不够好 - 去其他地方试试吧

查看实际的算法,它们比这更复杂。

许多研究归结为提出一个好的评分函数和一个了解哪些参数有效以及如何使用它们的好方法。

使用此一般大纲 - 只需尝试将亮度/对比度作为您的输出生成函数(亮度和对比度是输入)。对于评分,您将需要一种比较两张照片的匹配方式——首先,选择简单的东西(也许硬编码一个要检查的区域)。

一旦开始,您将对如何做到这一点有更多的见解,并且可以回到论文中寻找想法。

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 2015-12-06
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多