一尘不染

如何通过编程对图像进行卡通化?

algorithm

我的应用程序可以处理人的照片和视频,我想对其进行卡通化处理。因此,我需要一种算法来手动执行此操作(我们为产品使用c ++ /
Qt,该产品具有图像处理类),或者可能需要一些CLI程序来为我执行此操作,我可以从自己的应用程序中调用和使用它。


阅读 279

收藏
2020-07-28

共1个答案

一尘不染

以下是一些算法:

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

这些是相当基本的,并且都很容易实现。请记住,可以使用线性时间复杂度和内核半径来实现中值和框模糊滤波器。

更多编辑:

一旦您了解了Huang的算法,实现框模糊滤镜就是一件轻松的事。

阅读材料:

  • 快速中值和双边过滤(获取PDF)
  • 中值滤波恒定时间(获取PDF) 注意: 我在C#中使用Mono / SIMD来加速直方图合并,在C#中实现了该实现,但是,由于直径超过〜60像素,它似乎只比 Or )算法好。相当数量的添加/子指令(盈亏平衡点),C ++实现可能更适合利用SIMD。

其他阅读材料包括Gonzalez&Woods的“数字图像处理”(似乎是较旧的版本),用于分割和边缘追踪。8向边缘跟踪可能很难使您的头弯曲(在像素上或像素间边缘之间进行选择以及如何锁定到边缘上)。我很乐意分享一些代码,但是数百个衬里并不完全适合其中。

2020-07-28