fas*_*all 8 language-agnostic photoshop algorithm reverse-engineering image-processing
Photoshop有很多很酷的艺术过滤器,我很想了解底层算法.
一个特别有趣的算法是Cutout过滤器(上面链接中的数字2).
它有三个可调参数,级别数,边缘简洁性和边缘保真度.级别的数量似乎推动了直接的分色算法,但其他滑块在技术上做到了什么.
我认为他们正在做一些与Vornoi图或k-means分割有关的事情,但在维基百科上四处寻找并没有导致任何明显映射到Photoshop正在做的事情,特别是考虑到过滤器渲染自身的速度.
Photoshop滤镜的技术说明是否有任何来源?或者,您对如何实现此特定过滤器有任何想法吗?
小智 6
非常老的问题,但也许有人在寻找答案,也许这会有所帮助。Opencv 的 findcontours 和 approxPolyDP 函数可以做到这一点。但我们需要在主进程之前准备图像。第一的; 使用 k 均值查找最常用的 N 种颜色。例如找到 8 种颜色。找到每种颜色的轮廓,然后逐一计算所有颜色的轮廓面积(我们将有 N=8 层)。之后,在 approxPolyDP 之后,使用预先计算的颜色为每种颜色从最大 ContourArea 到较小的 ContourArea 绘制填充轮廓。我的另一个建议是在计算轮廓面积时消除非常小的轮廓。
Photoshop抠图效果参数;Number Of Levels=K-Means-找到最常用的N种颜色。Edge Simplicity=我猜想高斯模糊或其他去除噪声滤波器(例如双边滤波器或具有边缘保留的均值平移滤波器)对此步骤很有用。此步骤可以在 K-Means 之后、查找轮廓之前执行。边缘保真度=openCV的approxPolyDP epsilon参数。