如何使用程序将图像卡通化?

68

我的应用与人物的照片和视频一起使用,我想把它们变成卡通风格。因此,我需要一种算法手动完成这个任务(我们的产品使用c++/Qt,具有图像处理类),或者可以调用并从自己的应用程序中使用的CLI程序来完成这个任务。


4
请给一些卡通化图片的例子。 - ThibThib
要获取更多的搜索结果、论文等,请搜索“非真实感渲染(2D)”。 - felix
1
我已经数不清有多少次看到新用户的问题因为没有描述他/她尝试过什么、研究了什么、代码等而被投票淹没。而这个问题却得到了55个赞! - andydavies
8个回答

47

以下是一些可以尝试的算法:

  • 中值或重复盒式模糊滤镜,以获得卡通色调
    • 编辑:双边过滤可能更适合您的需求
  • 最小值滤镜(零点百分位数),以增强某些类型的边缘
  • 使用RGB色彩立方体中的小子立方体或球形进行彩色图像分割
  • 在分割图像上使用边缘检测(如Sobel核或8向边缘追踪)进行通用边缘增强
  • 将模糊/中值滤波后的图像与增强的边缘组合

这些都是相当基础的,很容易实现。请注意,中值和盒式模糊滤镜可以实现与内核半径线性时间复杂度。

更多编辑:

一旦您掌握了Huang算法的思路,实现盒式模糊滤镜就像品尝美味的蛋糕一样简单。

阅读材料:

  • 快速中值和双边滤波 (获取PDF)
  • 中值过滤常数时间 (获取PDF)注意:我使用Mono/SIMD在C#中实现了这个,以加速直方图合并,但是当直径超过约60像素时,它似乎比O(r)算法更好,由于相似的加/减操作数量(平衡点),C ++实现可能更适合利用SIMD。

其他阅读材料包括Gonzalez& Woods数字图像处理(似乎是旧版本)用于分割和边缘跟踪。8向边缘跟踪可能会让人很难理解(需要在一个像素或者两个像素之间的边缘之间进行选择,并决定如何抓住这些边缘)。我很愿意分享一些代码,但是几百行的代码不太容易贴在这里。


这似乎最适合我的需求 - 你知道我们可以在这里发布哪些好的在线算法资源吗,以便完整吗? - JimDaniel
1
色阶分割是一种量化转换,它不考虑几何信息。 - Cecil Has a Name
有人有使用ImageMagick或Gimp批处理模式的示例吗?我正在尝试在Ubuntu Linux上为一个项目解决这个问题。 - Volomike
很棒的回答!您能详细解释一下“彩色图像分割”步骤吗?我认为分割是在边缘检测之后用于识别物体的,不是吗? - NeoWang

22

您可以尝试进行动态描绘,就像 toonyphotos.com 所做的一样:

动态描绘示例


5
常见问题解答(FAQ):“Rotoscope需要人类参与才能正常工作。” - Josip
@Josip:你是对的,我忽略了那一点。不过,总的来说,rotoscopy似乎可以做到他所要求的。 - mooware
你在哪里找到这个源代码的 @bryanbcook? - ina

13

+1 - 这是一张非常棒的图片,尤其是那些线条,它们极大地帮助了这张图片的外观和解释。 - tom10

8
如果有一组参数可以在GIMP的漫画滤镜(或其他滤镜的某些组合)中实现所需的效果,则可以在批处理模式下运行。

6

我没有亲自尝试过,但是考虑以下两个步骤可以使图像看起来更加卡通化:

  1. 检测边缘,并在这些边缘上绘制相当厚的线条(几个像素)。

  2. 减少图像中的颜色数量。


我实际上尝试了这个算法,但是没有成功。也许有什么遗漏? - ufukgun

5

不确定这是否有帮助,但是这篇Photoshop教程建议执行以下步骤:

  1. 在Photoshop中打开您的图像
  2. 滤镜 > 模糊 > 高斯模糊。将半径设置为3.0或更高,根据个人喜好调整。
  3. 编辑 > 褪色高斯模糊。将出现一个窗口……将模式设置为变暗。您可能还需要降低透明度。

这是最后的效果。

enter image description here

我想您也可以在您的程序中执行类似的操作。


找不到教程,这个网站看起来更像是一个链接农场...请修复链接。 - redtuna
很奇怪,我发布时它还能工作。现在已经修复了,看起来又可以工作了。感谢提醒。 - RiddlerDev

4
这个比较容易实现,以下是步骤:
  • 双边滤波简化/抽象照片。您可能需要将双边滤波器分离,以使其更快。沿着梯度和法线方向分别进行双边滤波。

  • 检测边缘。例如,使用高斯差分算法。您可能需要在梯度方向上使用DoG,并沿着流线平滑它。要获取流线,您需要通过结构张量获取边缘切线流(ETF)。

  • 量化颜色。实际上,您将量化亮度以模拟单色调/卡通渲染。

  • 在量化后的抽象图像和检测到的边缘之间进行混合。

这将为您提供一个看起来像单色调卡通的渲染图像。
我制作了一些免费软件(适用于win64),可以完全实现这一点,网址是: http://3dstereophoto.blogspot.com/p/painting-software.html 软件名为“The Cartoonist”,您可以在此处查看其操作: http://3dstereophoto.blogspot.com/2018/07/non-photorealistic-rendering-software_9.html 这些都是我博客的链接,主要涉及3D摄影(深度图,摄影测量等)。

1

实际上我不知道有什么工具,但你可以看看osg(openSceneGraph)。

这里有一个osgFX库和卡通效果...也许你可以从那个库中获得灵感...


也许(我不确定)ImageMagick有很多功能,也许它有这样的一个功能,但我不知道...


场景图是显示系统的一部分,它负责存储要显示的对象图 - 而不是操作图像。 类似于openCV这样的库可能更合适。 - Martin Beckett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接