【问题标题】:What is the best way to smoothen a noisy image filter?平滑嘈杂图像过滤器的最佳方法是什么?
【发布时间】:2019-03-31 09:11:38
【问题描述】:

我目前正在尝试在 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 正在实现它?

【问题讨论】:

  • 不使用单个亮度值,而是使用内核通过对片段本身及其邻居进行采样并对它们进行加权平均来获得片段的最终亮度
  • 有很多差异,没有一个是由于噪音。这个过滤器比你迄今为止所做的要复杂得多。

标签: unity3d opengl image-processing shader hlsl


【解决方案1】:

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

这是一个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 交叉过滤器来检测图像中的所有边界,然后使用该值的倒数作为高斯模糊的掩码。它不会给你同样好的分层效果。

【讨论】:

    猜你喜欢
    • 2017-09-11
    • 2010-10-07
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2011-05-03
    • 2019-10-26
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多