平滑嘈杂图像过滤器的最佳方法是什么?

What is the best way to smoothen a noisy image filter?

我目前正在尝试在 Unity 中重现 Instagram 的水彩效果。

Instagram:https://i.imgur.com/aMyEhjS.jpg

我的做法:https://i.imgur.com/9zIOQ7k.jpg

我的方法比较吵。这是创建效果的主要代码:

float3 stepColor(float3 col){
     const float3 lumvals = float3(0.5,0.7,1.0);

    float3 hsv = rgb2hsv(col);
    if(hsv.z <= 0.33){
        hsv.z = lumvals.x;
    }
    else if(hsv.z <= 0.55){
        hsv.z = lumvals.y;
    }
    else{
        hsv.z = lumvals.z;
    }
    return hsv2rgb(hsv);
} 

哪种算法适合在此处对最终结果进行去噪和平滑处理,因为 Instagram 正在实现它?

水彩滤镜使用一种叫做均值漂移分析的东西来平均化图像,同时保留特征。这是一种迭代方法,您可以使像素簇趋向于它们的平均值。

这是一个 java 代码示例: https://imagej.nih.gov/ij/plugins/mean-shift.html

这是一篇描述水彩效果及其成分(包括边缘变暗)的论文: http://maverick.inria.fr/Publications/2006/BKTS06/watercolor.pdf

有一个带有 CUDA 和 OpenCL 实现的 github 项目,但如果您想真正理解该算法,我建议您参考此页面,它使用 python 代码非常巧妙地解释了它:

http://www.chioka.in/meanshift-algorithm-for-the-rest-of-us-python/

我想到的另一个选择是使用 Sobel/Roberts 交叉过滤器来检测图像中的所有边界,然后使用该值的倒数作为高斯模糊的掩码。它不会给你同样好的分层效果。