代码之家  ›  专栏  ›  技术社区  ›  fastcall

photoshop剪切滤镜是如何实现的?

  •  9
  • fastcall  · 技术社区  · 17 年前

    Photoshop有很多很酷的东西 artistic filters ,我很想了解底层算法。

    一个特别有趣的算法是Cutout过滤器(上面链接中的数字2)。

    它有三个可调参数,级别数、边缘简单性和边缘保真度。级别的数量似乎驱动了一个简单的后验算法,但其他滑块在技术上的作用让我感到困惑。

    我认为他们正在做一些与Vornoi图或k-means分割相关的事情,但在维基百科上四处浏览并没有发现任何明显与Photoshop正在做的事情相匹配的东西,特别是考虑到滤镜渲染本身的速度有多快。

    Photoshop滤镜的技术描述有来源吗?或者,您对如何实现这个特定的过滤器有什么想法吗?

    9 回复  |  直到 17 年前
        1
  •  6
  •   Martin Beckett    16 年前

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

        2
  •  3
  •   Ismael C Ismael C    17 年前

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

    Photoshop剪切效果参数; 级别数=K-Means-查找最常用的N种颜色。 边缘简单性=我想高斯模糊或其他去除噪声的滤波器,如双边滤波器或具有边缘保持的均值漂移滤波器,对于这一步来说是有用的。此步骤可以在K-Means之后和查找轮廓之前执行。 边缘保真度=openCV的近似PolyDP epsilon参数。

        3
  •  3
  •   Sunny Milenov    17 年前

    你看到了吗 post 。它解释了如何使用以下方法获得相同的结果 ImageMagic ,而IM是 opensource .

        4
  •  0
  •   Kibbee    17 年前

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

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

        5
  •  0
  •   Jasper Bekkers    17 年前

    也许这不是你想要的,但如果你想知道过滤器是如何工作的,你可以查看GIMP的源代码。我不能说GIMP是否有你提到的剪切过滤器,但如果你真的对这个领域感兴趣,值得一看。

        6
  •  0
  •   Maleev    17 年前

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

    另外两个参数需要更多的思考,但“边缘简单性”似乎会引爆形状构建的分段数量。或者更确切地说:应用于一些原始图像分割算法的改进数量。保真度滑块似乎也有类似的作用;它可能控制着何时进行改进的某种阈值。

    This might help

        7
  •  0
  •   James B    17 年前

    有一个简单的解决方案,理论上会产生类似于过滤器的东西。 与伊斯梅尔·C的建议有些相似。

    简单 控制窗口大小。也许窗户应该加重。

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

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

    考虑到我们有一些后验算法,它随后被应用。

    我们开始了!

    如果你实施了,请报告结果。

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

        8
  •  0
  •   Kamil Szot    17 年前

    我想这可能是一些阈值处理、边缘检测(索贝尔/坎尼/罗伯茨/无论什么)和后验。