Photoshop有很多很酷的artistic filters,我很想了解底层算法。
一种特别有趣的算法是Cutout过滤器(在上面的链接中为2)。
它具有三个可调参数:“级别数”,“边缘简化度”和“边缘保真度”。级别的数量似乎在驱动一种简单的后代算法,但是其他滑块在技术上的作用使我难以理解。
我认为他们正在做一些与Vornoi图或k均值分割有关的事情,但是在Wikipedia上四处寻找并没有导致任何东西明显地映射到Photoshop所做的事情,尤其是考虑到滤镜渲染的速度。
是否有任何有关Photoshop滤镜技术描述的资料?另外,您是否对如何实现此特定过滤器有任何想法?
最佳答案
很老的问题,但也许有人在寻找答案,这可能会有所帮助。
Opencv的findcontours和roxPolyDP函数可以做到这一点。但是我们需要在主要过程之前准备图像。
第一的;用k均值找到最常用的N种颜色。例如,找到8种颜色,找到每种颜色的轮廓,然后一一计算所有颜色的ContourArea(我们将有N = 8层)。之后,在大约PolyDP之后为每种颜色绘制填充轮廓,从最大的ContourArea到具有其预先计算的颜色的较小颜色。
我的另一个建议是在计算ContourArea时消除非常小的轮廓。
Photoshop抠图效果参数;
级别数= K表示最常用的N种颜色。
Edge Simplicity =我想高斯模糊或其他去除噪声的滤波器(如双边滤波器或具有边缘保留功能的均值漂移滤波器)对于该步骤很有用。该步骤可以在K均值之后和找到轮廓之前执行。
边缘保真度= openCV的roxPolyDP epsilon参数。
关于algorithm - Photoshop抠图滤镜是如何实现的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/237372/