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

photoshop剪切过滤器是如何实现的?

  •  8
  • fastcall  · 技术社区  · 16 年前

    Photoshop很酷 artistic filters

    一个特别有趣的算法是截断滤波器(上面链接的第2个)。

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

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

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

    8 回复  |  直到 16 年前
        1
  •  6
  •   Martin Beckett    14 年前

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

        2
  •  3
  •   Ismael C Ismael C    16 年前

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

        3
  •  3
  •   Sunny Milenov    16 年前

    你看到这个了吗 post . 它解释了如何使用 ImageMagic ,而IM是 opensource .

        4
  •  0
  •   Kibbee    16 年前

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

        5
  •  0
  •   Jasper Bekkers    16 年前

    级别的数量似乎与单元着色的方式类似,这就是我在本例中实现该部分的方式:只需取图像的直方图,将其划分为“级别数量”部分,然后计算每个部分的平均值。直方图中的每种颜色将使用该平均值,而不是它们的原始颜色。

    其他两个参数需要更多的思考,但“边缘简单性”似乎引爆了形状建立的分段数。或者更确切地说:应用于一些原始图像分割算法的改进次数。“逼真度”滑块似乎也做了类似的事情;它可能控制某种阈值,以确定何时应该进行优化。

    This might help

        6
  •  0
  •   Maleev    16 年前

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

    边缘 简单

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

    给出了一些后验算法,并进行了应用。

    我们走!

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

        7
  •  0
  •   James B    16 年前

    我想可能是一些阈值,边缘检测(Sobel/Canny/Roberts/whatever)和后验。

        8
  •  0
  •   Kamil Szot    15 年前

    从修补中我发现:

    • 它不做任何基于像素的后验来达到最终的效果
    • 它可能不使用任何基于像素的边缘检测,它似乎更适合于区域而不是边缘。
    • 它计算要绘制的闭合多边形的形状(某些多边形边可能与图像边重叠)。
    • 当多边形的边缘已知时,包围在边缘中的每个区域(不一定属于一个多边形)的颜色用该区域覆盖的原始图像像素的平均颜色来着色。
    • 多边形的边可以与自身相交。 特别是高边缘简单可见。
    • 当“直线简单性”下降时,多边形边的数量增加,但多边形的数量也增加。
    • 边保真度影响线多边形边数,但不影响多边形数
    • 高边缘简单性和低边缘保真度似乎更喜欢固定在图像边缘的多边形,甚至以牺牲理智为代价。

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

    ... 或许不是。