将真实图像卡通化

8

有没有人知道我们是否可以将使用相机拍摄的真实图像转换为卡通风格?

请注意,我的目标不是创建动画或类似物,而只是在可能的情况下将其转换为“卡通颜色”。

简单的重新量化到存在较少量化级别的空间中能否奏效?或者其他特定的转换更好?

任何帮助都将很有用,因为我找不到任何相关材料。

提前感谢。

6个回答

7
金字塔均值漂移加上检测到的边缘轮廓似乎可以完成任务。
代码如下:
cv::Mat segmented, gray, edges;
cv::pyrMeanShiftFiltering(input, segmented, 15, 40);
cv::cvtColor(segmented, gray);
cv::Canny(gray, edges, 150, 150);
cv::cvtColor(edges, edgesBgr, CV_GRAY2BGR);
cv::Mat result = bgr - edgesBgr;

这是我得到的结果: 卡通滤镜后的教堂 详情请参见:OpenCV教程第6部分

链接不可用。 - artem

5
你试图做的最常见的事情是来自3D模型,被称为卡通着色或“toon-shading”。基本上,你会尝试强制统一颜色,并在与光源某些角度的突然转换处施加压力。
显然,这在2D输入图像中不太好实现。你可以做的是重新量化,但要确保你均匀填充区域并在图像梯度高的地方进行分割。 非线性扩散是一种去噪技术,它强制使区域变得均匀以消除噪声。如果你让它循环太多次,你会得到一个看起来像卡通的图像。
我大约2-3年前实现了这个方法,考虑到它并不难实现,效果出乎意料地好。但是,你需要一个GPGPU实现,因为它非常

有没有办法在智能手机上实现相同的功能?我知道重新量化会相当快,如果图像是n乘m,则为O(n*m)。最坏情况下,n和m的数量级为2000。 - Egon
重新量化不会给您相同质量的结果。如果您愿意为速度而牺牲质量,那是您的决定!说实话,您应该实现多种方法,分析权衡然后再在智能手机上实现它。如有必要,请查看MATLAB、Scilab或Octave进行原型设计。 - André Caron
非线性扩散需要大量的处理能力。 - karlphillip
是的,注意我回答中的最后一句话 :-) - André Caron

2
你也可以看一下均值漂移分割。这里有一个实现:EDISON

2

完全靠猜的:

  1. 将图像转换到HSV颜色空间(使用CV_BGR2HSV进行cvtColor)
  2. 不改变H(色相)通道,或者将其量化为更小的集合
  3. 使用低阈值对饱和度(S)进行二元阈值处理,使得浅色变成白色
  4. 使用低阈值对明度(V)进行二元阈值处理,使得暗色变为黑色

这是未经测试的。我可能在胡说八道...但是如果可以工作,应该非常低的CPU使用率。这似乎是一种用滑块调整步骤2-4所需值并进行微调的方法。

编辑:一个朋友指出你可能还想要在物体周围画出线条。我第一个想法是使用cvCanny选择边缘(需要灰度图像...我不确定在HSV卡通之前或之后做这件事情更好)。它们将是单个像素宽,可能不够宽,因此您可能需要用dilate稍微加宽它们。它们将是黑色背景上的白色,因此您可以从卡通染色图像中减去它们,这将把线所在的像素降至0(饱和算术救援),但保留其他像素。


2

你提到的“卡通空间”让我想到,也许你可以从这个想法开始:

  1. 创建一个卡通颜色空间,包含20-30种漂亮、鲜艳的颜色,覆盖大部分常规RGB空间,具有明亮/闪亮的主题(或其他你喜欢的卡通颜色主题)。
  2. 重新量化你的图像,不是使用图像中可用颜色的子集,而是使用你的卡通颜色空间中的颜色(即将每种颜色与你的卡通颜色空间中最接近的颜色匹配)。
  3. 加分项:消除小的彩色区域,以获得更加均匀的单色外观。
  4. 更多加分项:为每个单色区域添加黑色轮廓线,增加卡通效果。也许可以根据原始图像中的渐变来调整线条粗细。
  5. 可选微调:将所有颜色转换为HSV颜色空间,仅在Hue通道上执行第2步,以获得额外的阴影免疫性。

0

这个任务相对容易。以下是步骤:

  • 双边滤波简化/抽象照片。您可能需要将双边滤波分开以加快速度。沿着梯度和法线方向进行1d双边滤波。
  • 检测边缘。例如,使用高斯差分算法。您可能希望在梯度方向上使用DoG,并沿着流线平滑它。要获取流线,您需要通过结构张量获得边缘切线流(ETF)。
  • 量化颜色。实际上,您可以量化亮度以模拟卡通渲染。
  • 混合量化后的抽象图像和检测到的边缘。

我放了一些免费软件(适用于win64),可以完全做到这一点http://3dstereophoto.blogspot.com/p/painting-software.html。它叫做“卡通画家”。

如果你想看《漫画家》,可以查看http://3dstereophoto.blogspot.com/2018/07/non-photorealistic-rendering-software_9.html。它展示了一个例子的所有步骤。

明确一下,这些是指向我的博客链接,主要涉及3D摄影(深度图,摄影测量等)。我喜欢绘画,也在图像非真实渲染(npr)方面进行研究。


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