如何以编程方式对图像进行卡通?

时间:2009-08-31 13:11:20

标签: algorithm image-manipulation command-line-interface

我的应用程序可以处理人们的照片和视频,我想用它来进行漫画。所以我需要一个算法来手动完成(我们的产品使用c ++ / Qt,它有图像处理类)或者也许是一些CLI程序,我可以在我自己的应用程序中调用和使用它。

8 个答案:

答案 0 :(得分:47)

以下是一些可以使用的算法:

  • 中位数或重复框模糊滤镜以获得卡通色调
    • 编辑:双边过滤应该更符合您的需求
  • 最小滤镜(第0百分位数)以增强某些类型的边
  • 使用RGB颜色立方体中的小子立方体或球体进行彩色图像分割
  • 使用边缘检测(如Sobel内核或8向边缘跟踪)对分割图像进行通用边缘增强
  • 具有增强边缘的复合模糊/中值滤波图像

这些都非常基础,而且非常容易实现。请记住,中值和盒子模糊滤镜可以用线性时间复杂度w.r.t实现。内核半径。

更多修改:

一旦你了解了黄的算法,实现盒式模糊滤镜是一块美味的蛋糕。

阅读材料:

  • Fast Median and Bilateral Filtering(获取PDF)
  • Median Filtering Constant time(获取PDF)的注:的我有使用单声道/ SIMD加速直方图聚结在C#中的这一个实现,但它只是似乎比更好的 0 - [R )当直径超过算法〜60个像素,由于可比数量的加/子指令(盈亏平衡点),一个C ++实现可能更适合于线束SIMD。

其他阅读材料包括用于细分和边缘追踪的Gonzalez & Woods' Digital Image Processing(似乎是旧版本)。 8向边缘跟踪可能非常难以弯曲(在像素上或像素间边缘之间进行选择以及如何锁定边缘)。我很乐意分享一些代码,但是百行代码并不完全适合这里。

答案 1 :(得分:22)

您可以尝试旋转镜检查,例如toonyphotos.com

rotoscopy example

答案 2 :(得分:12)

您可能需要查看Freestyle,这是一个开源(Google Summer of Code,甚至)项目,以便为non-photorealistic renderer实施Blender。以下是卡通模式下输出的示例: alt text
(来源:sourceforge.net

答案 3 :(得分:7)

如果有一组参数可以在the GIMP的卡通过滤器(或其他一些过滤器组合)中达到预期的效果,则可以在batch processing mode中运行。

答案 4 :(得分:6)

我自己并没有这样做,而是考虑了两个步骤,可能会给图像带来卡通效果。

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

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

答案 5 :(得分:5)

不确定这是否有帮助,但Photoshop的this tutorial建议执行以下操作:

  1. 在Photoshop中打开图片
  2. 过滤器>模糊>高斯模糊。将半径设置为3.0或更高,以品尝。
  3. 编辑>淡化高斯模糊。将弹出一个窗口。 。 。将模式设置为变暗。您可能还需要降低不透明度。
  4. 这是结果。

    enter image description here

    我想你可以在你的程序中做类似的事情。

答案 6 :(得分:3)

这相对容易做到。步骤如下:

  • 双向过滤可简化/抽象照片。您可能需要分离双边过滤器,以便更快。沿梯度在1d内执行双边过滤,然后沿梯度的法线执行。

  • 检测边缘。例如,使用高斯差分算法。您可能需要在渐变方向上使用DoG,并按照流线对其进行平滑。要获取流线,您需要获取可以通过结构张量获得的Edge Tangent Flow(ETF)。

  • 量化颜色。实际上,您可以对亮度进行量化,以模拟cel阴影(又称为卡通阴影)。

  • 将量化后的抽象图像和检测到的边缘混合在一起。

这将为您提供看起来像cel阴影卡通片的渲染图像。

我制作了一些免费软件(用于win64),该软件可以在以下位置执行此操作: http://3dstereophoto.blogspot.com/p/painting-software.html

该软件的名称为“ The Cartoonist”,您可以在此处查看其运行情况: http://3dstereophoto.blogspot.com/2018/07/non-photorealistic-rendering-software_9.html

这些都是我博客的链接,主要涉及3d摄影(深度图,摄影测量等)。

答案 7 :(得分:1)

实际上我不知道一个工具,但你可以看看osg(openSceneGraph)

有一个osgFX库,有卡通效果......也许你可以从那个图书馆激发......


也许(我不知道)imagemagick有很多功能,也许它有这样的功能,但我不知道......