8

Photoshop 有很多很酷的艺术滤镜,我很想了解底层算法。

一种特别有趣的算法是 Cutout 过滤器(上面链接中的第 2 号)。

它具有三个可调参数,层数、边缘简单性和边缘保真度。级别数似乎驱动了一个简单的后处理算法,但其他滑块在技术上所做的事情让我难以理解。

我认为他们正在做一些与 Vornoi 图或 k-means 分区相关的事情,但是在维基百科上四处寻找并没有导致任何明显映射到 Photoshop 正在做的事情,特别是考虑到过滤器自身渲染的速度。

是否有任何关于 Photoshop 滤镜技术描述的来源?或者,您对如何实现此特定过滤器有任何想法吗?

4

9 回答 9

6

边缘检测通常是 Sobel 或 Canny 滤波器,然后边缘通过链码连接在一起。
查看OpenCV库之类的详细信息

于 2008-10-26T04:57:33.470 回答
4

你看到这个帖子了吗。它解释了如何使用ImageMagic获得相同的结果,并且 IM 是开源的。

于 2009-03-03T23:09:53.087 回答
3

我不确定它可能是某种细胞着色,但它看起来也像一个内核大小非常大的中值滤波器,或者被应用了多次。

边缘简单性/保真度可能是有助于根据与当前像素的颜色差异决定是否考虑相邻像素(或落在内核内的像素)的选项。

于 2008-11-26T19:05:07.323 回答
3

非常老的问题,但也许有人在寻找答案,也许这会有所帮助。Opencv 的 findcontours 和 approxPolyDP 函数可以做到这一点。但是我们需要在主进程之前准备好图像。第一的; 用 k-means 找到最常用的 N 种颜色。例如找到 8 种颜色。找到每种颜色的轮廓,然后一一计算所有颜色的轮廓面积(我们将有 N = 8 层)。之后,在 approxPolyDP 之后为从最大的 ContourArea 到更小的每种颜色绘制填充轮廓,并使用其预先计算的颜色。我的另一个建议是在计算轮廓区域时消除非常小的轮廓。

Photoshop抠图效果参数;Number Of Levels=K-Means-找出最常用的N种颜色。Edge Simplicity=我猜高斯模糊或其他去除噪声滤波器,如双边滤波器或具有边缘保留的均值偏移滤波器将对此步骤有用。此步骤可以在 K-Means 之后和找到轮廓之前执行。Edge fidelity=openCV 的 approxPolyDP epsilon 参数。

于 2020-08-29T13:45:44.820 回答
0

也许不完全是您想要的,但如果您想了解过滤器的工作原理,您可以查看 GIMP 的源代码。我不能说 GIMP 是否具有您提到的等效剪切过滤器,但如果您真的对这个领域感兴趣,那么值得一看。

于 2008-10-26T02:56:17.863 回答
0

级别数似乎类似于单元格着色的完成方式,这就是我在这种情况下实现该部分的方式:您只需获取图像的直方图并将其划分为“级别数”数量的部分然后计算每个部分的平均值。然后直方图中的每种颜色将使用该平均值而不是其原始颜色。

其他两个参数需要更多思考,但“边缘简单”似乎引爆了形状建立起来的段数。或者更确切地说:应用于一些粗略的图像分割算法的细化次数。保真度滑块似乎做了类似的事情;它可能控制着什么时候应该进行改进的某种阈值。

这可能会有所帮助

于 2008-10-28T02:28:07.093 回答
0

有一个简单的解决方案,理论上会产生类似于该过滤器的东西。某种程度上类似于 Ismael C 的建议。

Edge Simplicity控制窗口大小。也许窗口应该加权。

但与常规窗口过滤器不同的是,这个过滤器只会从该窗口中获取固定大小的随机像素部分。该部分的大小由Fidelity参数控制。

将像素颜色设置为样本的中值。

鉴于我们有一些后处理算法,它会在之后应用。

开始了!

如果您实施,请报告结果。

PS。我真的怀疑是否使用了分段。

于 2009-03-03T19:31:33.847 回答
0

我想这可能是一些阈值、边缘检测(Sobel/Canny/Roberts/whatever)和后处理。

于 2009-03-03T19:48:02.730 回答
0

通过修补它,我发现:

  • 这是确定性的
  • 它不做任何基于像素的后处理来达到最终效果
  • 它可能不使用任何类型的基于像素的边缘检测,它似乎更适用于区域而不是边缘。
  • 它计算要绘制的闭合多边形的形状(一些多边形边缘可能与图像边缘重叠)。
  • 当多边形的边缘已知时,包围在边缘中的每个区域(不一定属于一个多边形)的颜色用该区域覆盖的原始图像像素的平均颜色着色。
  • 多边形的边缘可以与自身相交。 特别是对于高边缘的简单性可见。
  • 随着“线条简单性”的下降,多边形边的数量会增加,但多边形的数量也会增加。
  • 边缘保真度影响线多边形边缘计数,但不影响多边形计数
  • 高保真度 (=3) 导致单个多边形同时具有非常长和非常短的边缘,低保真度 (=1) 导致单个多边形具有大致相似长度的所有边缘
  • 高边缘简单性和低边缘保真度似乎更喜欢锚定在图像边缘的多边形,即使以理智为代价。

总而言之,它看起来像是 Adob​​e Illustrator 的简化版 Live Trace 算法,它使用多边形而不是曲线。

... 或者可能不是。

于 2009-09-20T14:57:32.903 回答