How is the photoshop cutout filter implemented?

前端 未结 9 812
日久生厌
日久生厌 2021-02-03 13:21

Photoshop has a lot of cool artistic filters, and I\'d love to understand the underlying algorithms.

One algorithm that\'s particularly interesting is the Cutout filter

相关标签:
9条回答
  • 2021-02-03 13:39

    Very old question but maybe someone searching for an answer and maybe this helps. Opencv's findcontours and approxPolyDP functions can do this. But we need to prepare the image before main process. First; find most used N colors with k-means. For example find 8 colors.Find contours for each color and then calculate contourArea for all colors one by one (We will have N=8 layers). After that draw filled contours after approxPolyDP for each color from biggest ContourArea to smaller with its pre-calculated color. My another suggestion is eliminate very small contours while calculating contourArea.

    Photoshop cutout effects parameters; Number Of Levels=K-Means-find most used N colors. Edge Simplicity=I guess gaussian blur or other removing noise filters like bilateral filter or meanshift filter with edge preserving will be useful for this step.This step can be executed after K-Means and before finding contours. Edge fidelity=openCV's approxPolyDP epsilon parameter.

    0 讨论(0)
  • 2021-02-03 13:42

    Maybe not exactly what you are looking for, but if you like knowing how filters work, you could check out the source code of GIMP. I can't say if GIMP has an equivalent of cutout filter you mentioned, but it's worth taking a look if you are truly interested in this field.

    0 讨论(0)
  • 2021-02-03 13:46

    From tinkering with it I've found out that:

    • it's deterministic
    • it doesn't do any kind of pixel based posterization to achieve final effect
    • it probably doesn't use any kind of pixel based edge detection, it seems to work rather with areas then edges.
    • it calculates the shapes closed polygons to draw (some of the polygon edges might overlap with image edges).
    • when the edges of polygons are known then color of each area enclosed in edges (not necessarily belonging to one polygon) is colored with average color of pixels of original image that area covers.
    • edge of polygon can intersect with itself. Especially visible for high edge simplicity.
    • as 'line simplicity' drops, the number of polygon edges increases, but also number of polygons increases.
    • edge fidelity influences line polygon edge count but does not influence polygon count
    • high edge fidelity (=3) causes single polygon to have very long and very short edges at the same time, low fidelity (=1) causes single polygon to have all edges roughly the similar length
    • high edge simplicity and low edge fidelity seem to prefer polygons anchored at edges of image, even at cost of sanity.

    Altogether it looks like simplified version of Live Trace algorithm from Adobe Illustrator that uses polygons instead of curves.

    ... or maybe not.

    0 讨论(0)
提交回复
热议问题